指针遍历字符串—华为机试题

来源:互联网 发布:淘宝网登陆页 编辑:程序博客网 时间:2024/04/30 08:38
9月5日,华为2014校园招聘的机试题目
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
    1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
    2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数: 
     void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
    输入pInputStr:  输入字符串lInputLen:  输入字符串长度
    输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例 
    输入:“cccddecc”   输出:“3c2de2c”
    输入:“adef”     输出:“adef”

    输入:“pppppppp” 输出:“8p”


#include<iostream>using namespace std;void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)// const means we can not change the value pInputLen pointer to;{const char *first,*last;char *out=pOutputStr;first=last=pInputStr;int co=1;while(first!=pInputStr+lInputLen){last++;if(*last==*first){co++;}else{if(co==1){*out=*first;out++;}else{*out=co+'0';out++;*out=*first;out++;}first=last; co=1;}}*out='\0';}int main(){char orig[]="yannnjieeehhhellooo";char changed[]="eqytghytfderioedss";stringZip(orig,19,changed);for(int i=0;changed[i]!='\0';i++){cout<<changed[i];}cout<<endl;system("pause");return 0;}




0 0
原创粉丝点击