面试题总结9

来源:互联网 发布:农业大数据应用 编辑:程序博客网 时间:2024/05/01 11:03
1、通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。

比如字符串“abacacde”过滤结果为“abcde”。

void main(){map<char, int> flag;string str = "abcacbdeaecbfgf";string result="";for (int i = 0; i < str.length(); i++){if (flag[str[i]] == 0){result += str[i];}flag[str[i]]++;}for (int k = 0; k < result.length(); k++){cout << result[k] << endl;}}


2、通过键盘输入一串小写字母(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”

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr){int j,k=0;char c[2];for (int i = 0; i < lInputLen; i = j+1){j = i;while (pInputStr[i] == pInputStr[j + 1]){j++;}if (j - i + 1 >= 2){sprintf(c, "%d", j - i + 1);pOutputStr[k++] = c[0];}pOutputStr[k++] = pInputStr[i];}pOutputStr[k] = '\0';}void main(){char * s = "pppppppp";char *res= new char[10];stringZip(s, 8, res);cout << res << endl;}


0 0
原创粉丝点击