发布网友 发布时间:2022-04-26 14:26
共3个回答
热心网友 时间:2023-10-10 08:16
/*
原串: 111225555
压缩后: 312245
原串: 333AAAbbbb
压缩后: 333A4b
原串: ASXDCdddddd
压缩后: 1A1S1X1D1C6d
Press any key to continue
*/
#include <stdio.h>
#include <string.h>
char *CompressStr(char s[]) {
char t[255];
int i = 0,j,k = 0;
while(s[i]) {
j = i + 1;
while(s[i] == s[j]) ++j;
t[k++] = j - i + '0';
t[k++] = s[i];
i = j;
}
t[k] = '\0';
strcpy(s,t);
return s;
}
int main(void) {
char i,s[][20] = {"111225555","333AAAbbbb","ASXDCdddddd"};
for(i = 0; i < 3; ++i) {
printf("原串: %s\n",s[i]);
printf("压缩后: %s\n",CompressStr(s[i]));
}
return 0;
}
热心网友 时间:2023-10-10 08:16
111225555 : 3个1,2个2,4个5;
333AAAbbbb:3个3,3个A,4个b;
找到规律了,定义一个数组,使用指针指向第一个地址,挨个查找,统计出来就行了。追问不好意思,我不会啊,可不可以帮我写出来程序,感激涕零!!!
热心网友 时间:2023-10-10 08:17
如果数据结构是数组的话,主要是要解决两个问题,一是统计重复的字符,二是确定数组压缩后每个元素在数组中所处的位置。
可以用一个指针遍历数组,另一个指针标记存储位置。
字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s="a1a2···an"(n>=0)。它是编程语言中表示文本的数据类型。
通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。