c语言编程【编写一个 C 函数,在一个字符串中找到可能的最长的子字符串,该字符串是由同一字符组成】

我写好了,可是不知道错在哪?只知道while语句那不能实现。麻烦帮看一下谢谢。

#include "stdio.h"
#include "string.h"

void shuchu(char x[]) //输出函数
{
int i=0;
printf("您输入的字符串为:");
for(i=0;x[i]!='\0';i++)
{
printf("%c",x[i]);
}
printf("\n");

}
void enter(char x[]) //输入函数
{
int i=0;
printf("请输入字符串:");
scanf("%c",&x[i]);
while(x[i]!='\n' && i<100)
{
i++;
scanf("%c",&x[i]);

}
x[i]='\0';
if(x[0]=='\0')
{
printf("您未输入任何数据,请重新输入:\n");
enter(x);
}
}
struct str //记录最大相同相连字符的属性
{
char zhi;
int weizhi;
int length;
};

void pdzdzfc(char zfc[]) //判断最大字符串的函数
{
char *move,*head;
struct str a[50];
int i=0,weizhi=0,temp=1,j=0;
head=zfc; //头指针指向用户输入的字符串首地址
move=head+1; //move指针指向用户输入的字符串的第二个地址
a[i].zhi=zfc[0]; //初始化记录
a[i].weizhi=0;
a[i].length=0;
shuchu(zfc); //输出用户输入的函数
while(*move!='\0') //当用户输入的字符串的第二个字符不为空,则进入循环
{
while(*move=*head)
{
temp++; //temp为临时记录相同且相连字符的长度
move++;
}
if(temp>a[i].length)
{
a[i].length=temp;
}
else if(temp=a[i].length)
{
i++; //当temp与记录长度相同时新建另一个记录
}
if(*move!=*head)
{
head=move;
a[i].zhi=*head;
a[i].weizhi=a[i].weizhi+temp;
}
}
if(*move=='\0') //当用户输入的字符串的第二个字符为空时
{
i=0;
}
if(i==0)
printf("您输入的字符串中最长相同相连字符为%c,其长度为%d,它从你输入字符串的第%d个位置开始。\n",a[0].zhi,a[0].length+1,a[0].weizhi);
else
{
printf("您输入的字符串中最长相同相连字符共有%d个等长等大。\n",i);
for(j=0;j<=i;j++)
{
printf("第一个的值为%c,其长度为%d,它从你输入字符串的第%d个位置开始。\n",a[j].zhi,a[j].length,a[j].weizhi);
}
}

}

void main()
{
char zfc[100];
int j=0,i=1,weizhi=1;
enter(zfc);
pdzdzfc(zfc);
}

第一,判断是否相等用" =="
第二,数组最好规定长度,如果没有规定长度,最好用指针。而且要用动态分配内存。所以你的
void enter(char x[]) //输入函数
这个函数根本就不对,因为数组不能自己动态增长。
第三,你在程序中已经限定了数组的长度是100,那么最好就直接使用x[100]。字符串是以'\0'结尾的,所以,只要读到'\0'就认为字符串结束。所以不需要动态数组。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-12
读的相当纠结。
1.几处判断的=应该改成==
2.思路,我没看懂,感觉很乱。
用result[]来记录结果,
resIndex记录结果的最大值的下标
当长度变大的时候,result[]中下标要重新从0开始记录啊
int resIndex=0;
int tempMaxLength=0;
for(int i=0;str[i]!='\0';)
{
int j=i;
while(str[j]!='\0'&&str[j]==str[i]) j++;
int length=j-i;
if(length>tempMaxLength)
{
resIndex=0;
tempMaxLength=length;
}
result[resIndex].length=length;
result[resIndex].index=i;
result[resIndex].ch=str[i];
resIndex++;
i=j;
}
主要代码就上面那样本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网