1 /* 2 华为2014年机试题3: 3 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 4 压缩规则: 5 1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。 6 2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。 7 要求实现函数: 8 void stringZip( const char *pInputStr, longlInputLen, char* pOutputStr ); 9 【输入】 pInputStr: 输入字符串 10 lInputLen: 输入字符串长度 11 【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长; 12 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出 13 示例 14 输入:“cccddecc” 输出:“3c2de2c” 15 输入:“adef” 输出:“adef” 16 输入:“pppppppp” 输出:“8p” 17 */ 18 19 #include<stdio.h> 20 #include<string.h> 21 #define MAX 100 22 23 void stringZip( const char * input, int len, char * output ); 24 void show(const char * output); 25 int main() 26 { 27 char input[MAX]; 28 char output[MAX]; 29 while(gets(input)!=NULL && input[0]!='\0') 30 { 31 stringZip(input,strlen(input),output); 32 show(output); 33 } 34 return 0; 35 } 36 37 38 void stringZip( const char * input, int len, char * output ) 39 { 40 int i,j=0,k=0; 41 int count = 1; 42 char * str = input; 43 char temp = str[0]; 44 for(i=1;i<len;i++) 45 { 46 //temp = str[j];//temp用于保存第一个字符或上一个不同的字符 47 if(str[i]==temp) 48 count++; 49 else 50 { 51 output[k] = count+'0'; 52 output[k+1] = temp; 53 k = k+2; 54 count = 1; 55 //j = i; //改变j以保存新的字符 56 temp = str[i]; 57 } 58 } 59 //保存最后一串相同的字符(肯定和str最后一个字符相同) 60 output[k] = count+'0'; 61 output[k+1] = str[len-1]; 62 output[k+2] = '\0'; 63 } 64 65 void show(const char * output) 66 { 67 char * str = output; 68 while(*str) 69 { 70 if(*str!='1') 71 putchar(*str); 72 str++; 73 } 74 putchar('\n'); 75 }
欢迎大家提出bug