题目:给定一个字符串,里面会有连续重复出现的字符,比如aabbbcdde,要求把连续重复的字符只保留一个,比如上面的字符串处理之后就变成了abcde。
分析:用两个指针,p和q,让p指向当前结果所在的位置,q指向搜索到什么位置。一旦q指向了一个跟p所指字符不同的字符,那么p后移,将q指向的字符复制过来,继续向后搜索。
代码如下:
1 #include 2 using namespace std;
3
4 const int LEN = 100;
5
6 int
7 main()
8 {
9 char* str = new char[LEN];
10 if(str == NULL)
11 return 1;
12
13 cin >> str;
14 char* p = str;
15 char* q = str;
16 while(*q)
17 {
18 ++q;
19 if(*p != *q)
20 {
21 ++p;
22 *p = *q;
23 }
24 }
25 p++;
26 *p = *q;
27 cout << str;
28
29 delete str;
30
31 return 0;
32 }
33
测试用例:
a
aabbccd
abcde