1 #define _CRT_SECURE_NO_WARNINGS 2 #include3 4 #include 5 #include 6 /* 7 功能: 8 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 9 压缩规则:10 1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。11 2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。12 要求实现函数:13 void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);14 【输入】 pInputStr: 输入字符串15 lInputLen: 输入字符串长度16 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;*/17 void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);18 19 int main()20 {21 char inputStr[100];22 char outputStr[100];23 24 memset(inputStr, '\0', sizeof(char) * 100);//清空操作25 memset(outputStr, '\0', sizeof(char) * 100);26 27 gets(inputStr);28 stringZip(inputStr, strlen(inputStr), outputStr);//数组地址 长度 最后放入的数组29 30 printf("%s", outputStr);31 32 getchar();33 34 return 0;35 }36 37 void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)38 {39 char cTemp;40 int i;41 int count = 1;42 char tempStr[20];43 44 memset(tempStr, '\0', sizeof(char) * 20);45 46 for (i = 1; i <= lInputLen; i++)47 {48 cTemp = pInputStr[i - 1];//这里注意循环从1开始 后一个和前一个比较相等就计数49 if (cTemp == pInputStr[i])50 {51 count++;52 continue; //结束这次循环 53 }54 else55 {56 if (count == 1)//如果还是最初的值 也就是没有相邻重复的57 {58 sprintf(tempStr, "%c", cTemp);//输出到字符串59 //printf("%s", tempStr);60 //getchar();61 62 strcat(pOutputStr, tempStr);63 memset(tempStr, '\0', sizeof(char) * 20);64 }65 else//有重复的情况66 {67 sprintf(tempStr, "%d%c", count, cTemp);68 strcat(pOutputStr, tempStr);69 memset(tempStr, '\0', sizeof(char) * 20);70 }71 count = 1;72 }73 }74 }