#include char word(char str[])
{int i,k,flag=0,max=0;
char str1[10],ch[10];
for(i=0;str[i]!='\0';i++)
if((65<=str[i]&&str[i]<=90)||(97<=str[i]&&str[i]<=122)) \\如果该字符是字母
{if(flag==0) \\如果该字符是字母,且新单词未开始
{
k=0;
ch[k]=str[i];
flag=1;}
else if(i==strlen(str)-1) \\如果该字符是字母,新单词已开始,且已到达字符串结尾
{k++;
ch[k]=str[i];
ch[k+1]='\0';
if(k+1>max) \\ k+1表示单词的长度
{max=k+1;
strcpy(str1,ch);
}
}
else \\如果该字符是字母,新单词已开始,且未到达字符串结尾
{k++;
ch[k]=str[i];
}
}
else if(flag==1) \\如果上一个单词已结束
{ch[k+1]='\0';
flag=0;
if(k+1>max)
{max=k+1;
strcpy(str1,ch);
}
}
printf("输入的字符串中,最长的单词有%d个字母,该单词是%s\n",max,str1);
}
main()
{char a[100];
printf("请输入一行字符:\n");
gets(a);
word(a); \\调用word函数
}
函数大致流程图如下(“<=”是赋值):
从实参数组a中获取数据到数组str中。
i<=0
否
Str[i]不等于结
束符’\0’
输出str1,结束
是
Str[i]是字母
否
Flag==1
是
是
否
i==strlen(str)-1
Flag==0
否
k<=k+1
ch [k]<=str[i]
是
是
k<=k+1
ch [k]<=str[i]
ch[k+1]<=’\0’
flag<=1
ch [k+1]<=’\0’
k<=0
ch[k]<=str[i]
flag<=1
k+1>max
是
i<=i+1
max<=k+1
strcpy(strl, ch)
在C-FREE5.0上的运行结果: