0,1条件妙用(输出英语句子中最长的单词)
来自一个C语言萌新的初略理解
可以说编写教材的老师真的有点难为我这一个初学一个多月的萌新了(第一次写博客,写的不好的地方,还劳烦各位大佬多多指教)
具体代码如下
#include<stdio.h>
#include<string.h>
int i;
int main()
{
char a[100];
int real(char c);
int longest(char s[]);
gets(a);
for (i = longest(a); real(a[i]); i++) {/*对与循环条件:通过下面的函数判断这个元素是不是字母,目的也就是为了只输出这个最长的单词*/
printf("%c", a[i]);
}
return 0;
}
int real(char c)
{
if ((c >= 'a'&&c <= 'z') || (c >= 'A'&&c <= 'Z')) {//判断该元素是不是字母,并以返回值作为条件
return 1;
}
else {
return 0;
}
}
int longest(char s[])
{
int flag = 1, place=0, point,l = 0, length=0;
for (i = 0; i < strlen(s); i++) {
if (real(s[i])) { /*检查数组元素为字母,标志是单词,则开始记*/
if (flag) { /*已经确认是一个单词了,可以记下单词首字母位置,point即表示单词首字母在数组中的位置*/
point = i;
flag = 0; /*关闭point计数,因为已经进入单词中间部分了,这时候,就是说,本次循环,s[i]还表示单词首字母,下一次就不是首字母了,下一次就走else里的l++*/
}
else {
l++;/*以l表示单词长度,一直到上层if不成立,单词结束,其实就是读到了空格,停止计数,这时候l的值就是这个单词的长度*/
}
}
else {
flag = 1;
if (l > length) {
length = l;/*找到较长那个单词,并更新目前最长单词长度*/
place = point;/*标记出较长的单词首字母在数组中的位置,即下标*/
l = 0;/*再将单词长度计量 l 赋0,便于下一次计数*/
}
}
}
return(place);
}
这上面的代码是教材后答案的思路,但是答案没有给注释,我在这里标上注释,希望同学者不被绕晕吧,我用的教材是谭浩强老师的c第五版。