题目如下:

这题用C语言实现有一些难度,要用到一个库函数,strcat(头文件是string.h),用于连接两个字符串数组,strcat(str,arr)就是将arr字符数组后面的\0清除,再将arr字符拼接到str上。
- #include
- #include
- int main()
- {
- char str[200] = { 0 };
- char arr[200] = { 0 };
- scanf("%s", arr);
- int n = strlen(arr);
- strcat(str, arr);
- int i = 0;
- for (i = 2; i <= n; i++)
- {
- scanf("%s", arr);
- strcat(str, arr);
- }
- printf("%d ", n);
- char* p = str;
- char ch = *p;
- int count = 0;
- while (*p != '\0')
- {
- if (*p == ch)
- {
- count++;
- }
- if (*p != ch)
- {
- printf("%d ", count);
- count = 1;
- ch = *p;
- }
- p++;
- }
- printf("%d ", count);
- return 0;
- }
题目指出,输入的是一个n*n大小的输入数据,可以先打印第一行后,计算第一行后,计算第一行的字符串长度,第一行的字符串长度就是n的值。用循环输入接下来的内容时i要从2开始,因为第一行在求n的值的时候,就已经被拼接到str里面了。
ch记录的是str首元素的内容,在元素未发生变化时,会一直记录后面和ch一样元素的个数。当元素发生变化时ch就会变成变化后的元素,继续计算接下来连续元素的个数。注意当ch发生变化时,count同样要加一,因为变化后的这个元素也属于连续元素。
p++即指向的数组元素下标加一,即p指向下一个元素。