题目要求:
输入一串字符(字符数小于80),以回车表示输入结束,编程计算并输出这串字符中连续重复次数最多的字符和重复次数。如果重复次数最多的字符有两个,则输出最后出现的那一个。
已知函数原型:
//函数功能:统计字符串中连续重复次数最多的字符及其重复的次数
//函数参数:str指向待统计的字符串,指针形参tag返回重复字符最后出现的下标位置
//函数返回值:返回字符重复的次数
int CountRepeatStr(char str[], int *tag);
求解思路:设置一个计数器,遍历字符串中的所有字符,若str[i] == str[i+1],则计数器加1,同时判断计数器的值是否大于记录的最大重复次数max,若大于,则用计数器的值更新max,并记录该字符最后出现的位置i+1.若str[i] != str[i+1],则计数器重新初始化为1。遍历结束时,函数返回max的值。
---------------------------------------------------------------------------------------------------------------------------------代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int CountRepeatStr(char str[], int* tag);
int main()
{
printf("Input a string:\n");
char ch[100];
int max = 0;
int* tag = &max;
fgets(ch, 100, stdin);
printf("%c:%d\n", ch[*tag], CountRepeatStr(ch, tag));
return 0;
}
int CountRepeatStr(char str[], int* tag)
{
int i = 0, max = 0, num = 1;
for (i = 0; i < strlen(str); i++)
{
if (str[i] == str[i + 1])
{
num = num + 1;
}
else
{
num = 1;
}
if (num > max)
{
*tag = i;
max = num;
}
}
return max;
}