额,加上一点运行结果,看看有没有帮助。有关指针,实参与形参的问题.怎么改才是形参改变实参???
输入一串字符(字符数小于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
////////////////////////////////////////////////////
#include"stdio.h"
#define N 80
#define Null 0
int CountRepeastStr(char str[], int *tag) ;
int main()
{
char a[N] ;
int ret, *p ;
printf("Input a string:\n") ;
p=gets(a) ;
ret=CountRepeastStr(a, p) ;
printf("%c:%d\n", *p, ret) ;
return 0 ;
}
int CountRepeastStr(char str[], int *tag)
{
int Max=1, i,count=1;
for(i=0 ;str[i+1]!='\0' ;i++)
{
if(str[i]==str[i+1])
{
count++ ;
}
else
{
tag=&str[i+1] ;
count=1 ;
}
if(count>=Max)
{
Max = count ;
}
}
return Max ;
}
[此贴子已经被作者于2016-10-26 19:59编辑过]