编写一个函数,接收一个字符串,统计其中任意两个及两个以上相邻宇符相同的子串的个数。比如字符串"abbcccaddd”子 串有"bb"、"cc"'、"cc"'、"dd"、"dd”、"ccc"和"ddd”',共7个。函数原型为:int fun(const char *str);
时间: 2023-07-02 07:23:40 浏览: 112
好的,这是一个字符串处理的问题,下面是我给出的解法:
```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的位置,否则可能会漏掉一些子串。
相关问题
c语言编写一个函数,接收一个字符串,统计其中任意两个及两个以上相邻宇符相同的子串的个数。
可以按照如下方法编写一个函数:
```c
#include <stdio.h>
#include <string.h>
int countSubstrings(char *str) {
int len = strlen(str);
int count = 0;
int i, j;
for (i = 0; i < len - 1; i++) {
for (j = i + 1; j < len; j++) {
if (str[j] == str[j - 1]) {
count++;
} else {
break;
}
}
}
return count;
}
int main() {
char str[100];
printf("请输入一个字符串:\n");
scanf("%s", str);
int count = countSubstrings(str);
printf("相邻字符相同的子串的个数为:%d\n", count);
return 0;
}
```
函数 `countSubstrings` 接收一个字符串 `str`,然后遍历这个字符串,统计其中任意两个及两个以上相邻字符相同的子串的个数,最后返回这个个数。在主函数中,我们通过调用 `countSubstrings` 函数来实现这个功能。
c语言编写一个函数,接收一个字符串,统计其中任意两个及两个以上相邻宇符相同的子串的个数。
以下是一个C语言函数,可以实现接收一个字符串,统计其中任意两个及两个以上相邻字符相同的子串的个数。函数返回值为统计到的子串个数。
```
int countSameAdjacentSubstrings(char* str) {
int count = 0;
int length = strlen(str);
for (int i = 0; i < length - 1; i++) {
if (str[i] == str[i+1]) {
count++;
int j = i+2;
while (j < length && str[j] == str[i]) {
count++;
j++;
}
}
}
return count;
}
```
该函数的实现思路是:遍历字符串中的每个字符,如果当前字符与下一个字符相同,则统计一个相邻相同子串,并继续向后查找,直到不再有相邻相同字符为止。
阅读全文