华为2014年机试题3

时间:2022-04-23 18:52:34
 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