编写一个函数,接收一个字符串,统计其中任意两个及两个以上相邻宇符相同的子串的个数。比如字符串"abbcccaddd”子 串有"bb"、"cc"'、"cc"'、"dd"、"dd”、"ccc"和"ddd”',共7个。函数原型为:int fun(const char *str);
时间: 2023-07-02 18:23:40 浏览: 109
编写程序,要求统计任意字符串中数字字符,字母和其他字符的个数
4星 · 用户满意度95%
好的,这是一个字符串处理的问题,下面是我给出的解法:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int fun(const char *str) {
int len = strlen(str);
int cnt = 0;
for (int i = 0; i < len-1; i++) {
int j = i+1;
while (j < len && str[j] == str[i]) j++; // 找到下一个不同的字符位置
int k = j-i-1; // k为相邻相同字符的个数
cnt += k*(k+1)/2; // 求和
i = j-1; // 更新i的位置
}
return cnt;
}
int main() {
string s = "abbcccaddd";
cout << fun(s.c_str()) << endl; // 输出7
return 0;
}
```
这个函数的基本思路是:遍历整个字符串,对于每个相邻相同字符的子串,求出其中相同字符的个数k,然后计算出以这k个字符为结尾的子串个数,即k*(k+1)/2。最后将所有的子串个数累加,就是最终结果。
需要注意的是,在求出当前相邻相同字符子串的个数后,要更新i的位置,否则可能会漏掉一些子串。
阅读全文