上午的问题解决了,但是不够完善,不能实现等长单词的输出,要实现这个的话就必须用到指针数组,这个对我来说有点难度,但是还是硬着头皮编了一下,结果错误一大堆,还是请大神们帮帮忙啊!多谢!多谢!
不要求全部输出等长的代码如下,编译可通过。
#include<stdio.h>
char *fun(char *p);
int alphabet(char c);
main()
{
char str[100];
char *s;
printf("input the string:\n");
gets(str);
s=fun(str);
if(s==NULL)
printf("the string is null!");
else
{
printf("the longest word is :\n");
while(alphabet(*s))
{
printf("%c",*s);
s++;
}
printf("\n");
}
}int alphabet(char c)
{
if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
return 1;
else
return 0;
}
char *fun(char *p)
{
int max=0;
int count=0;
int flag=1;
char *point=NULL;
while(*p!='\0')
{
if(alphabet(*p))
{
count++;
flag=0;
}
else
flag=1;
if(flag)
{
if(count>max)
{
max=count;
point=p-max;
count=0;
}
else
count=0;
}
p++;
}
return point;
}
如果想要实现全部输出等长单词,我自己写的代码如下,但是有错误,大神们帮忙看看啊!这个指针的指针对我实在是有点困难啊!多谢啦!
#include<stdio.h>
char *fun(char *p);
int alphabet(char c);
main()
{
char str[100];
char **s;
int i,j=0;
printf("input the string:\n");
gets(str);
s=fun(str);
if(s==NULL)
printf("the string is null!");
else
{
printf("the longest word are:\n");
for(i=0;*(s+i)!='\0';i++)
{
while(alphabet(*(*(s+i)+j))
{
printf("%c\n",*(s+i)+j);
j++;
}
j=0;
}
}
}
int alphabet(char c)
{
if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
return 1;
else
return 0;
}
char **fun(char *p)
{
int max=0;
int count=0;
int flag=1;
int i=0;
char *a[10];
char *point=NULL;
while(*p!='\0')
{
if(alphabet(*p))
{
count++;
flag=0;
}
else
flag=1;
if(flag)
{
if(count>max)
{
max=count;
point=p-max;
count=0;
}
else if(max==count)
{
point=p-max;
a[i++]=point;
count=0;
}
else
count=0;
}
p++;
}
return a;
}