统计重复字符(4分)
题目内容:
输入一串字符(字符数小于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的值。
程序运行结果示例1:
Input a string:
2344455555↙
5:5
程序运行结果示例2:
Input a string:
sgf222257↙
2:4
输入提示信息:"Input a string:\n"
输入格式: 用gets()输入字符串
输出格式:"%c:%d\n"
第一种解法
#include <stdio.h>
#include <string.h>
int CountRepeatStr(char str[], char *tag);
int main()
{
char str[80];
char *tag;
int ret;
printf("Input a string:\n");
gets(str);
tag=str;
ret=CountRepeatStr(str,tag);
printf("%c:%d\n",*tag,ret);
return 0;
}
int CountRepeatStr(char str[], char *tag)
{
int count=1,pos,max=1,i;
for(i=0;str[i]!='\0';i++)
{
if(str[i]==str[i+1])
{
count++;
*tag=str[i+1];
max=count;
}
else
count=1;
}
return max;
}
第二种解法
#include <stdio.h>
#include <string.h>
int CountRepeatStr(char str[], int *tag);
//tag用来记录重复次数最多的字符
int main()
{
char str[80];
int tag=0;//初始位置为第一个字符
int ret;
printf("Input a string:\n");
gets(str);
ret=CountRepeatStr(str,&tag);//传参时把tag的地址传过去
printf("%c:%d\n",str[tag],ret);//输出
return 0;
}
int CountRepeatStr(char str[], int *tag)
{
int count=1,max=1,i;
//count:计数器 max:最大的次数
for(i=0;str[i]!='\0';i++)//遍历整个字符串
{
if(str[i]==str[i+1])//如果前一个等于后一个,计数器+1
{
count++;
*tag=i+1;//指针指向重复最多的字符的位置
max=count;
}
else
count=1;
}
return max;
}