题目如下:
这题用C语言实现有一些难度,要用到一个库函数,strcat(头文件是string.h),用于连接两个字符串数组,strcat(str,arr)就是将arr字符数组后面的\0清除,再将arr字符拼接到str上。
#include <stdio.h>
#include <string.h>
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指向下一个元素。