解题思路:单指针检测

注意事项:

  1. cnt初始值为1;

  2. 字符串s大小需要留出‘\0’的位置;

  3. 记得换行;

  4. cnt==1时不输出cnt;

  5. pos记得移动,否则会死循环。



参考代码:

#include <stdio.h>

int main(void)
{
    int N;
    scanf("%d", &N);            //读取字符串数目(输入多少行)
    char s[10001];              //最后留出来的一个位置存放'\0'
    for (int i = 0; i < N; ++i) //进行N次处理,i不作为后续处理中的参数,仅仅作为计数
    {
        scanf("%s", s);        //输入字符串
        int pos = 0, cnt = 1;  //定义一个类似指针的东西(position),从左往右移动,初始化cnt = 1(相同字符的数量)
        while (s[pos] != '\0') //只要pos没指向'\0'对应的项就继续执行
        {
            if (s[pos] == s[pos + 1])
            {
                cnt++; //每次检测到相同的字符就cnt++;
            }
            else
            {
                if (cnt != 1) //若cnt不为1则输出cnt+字符
                    printf("%d%c", cnt, s[pos]);
                else //cnt为1则直接输出字符
                    printf("%c", s[pos]);
                cnt = 1;//恢复cnt的初始值1
            }
            pos++; //pos移动到下一个位置
        }
        printf("\n"); //第一行处理输出完毕,换行
    }
    return 0;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论