C语言,洛谷题,压缩技术2.0

题目如下:

C语言,洛谷题,压缩技术2.0_第1张图片

 这题用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指向下一个元素。

你可能感兴趣的:(c语言)