关于计算单词长度的算法
- C/C++ code
#include <stdafx.h>void main(){ void putstr(char str[200]); char a[200]; printf("请输入英文语句:\n"); gets(a); printf("其中最长的单词是:\n"); putstr(a); putchar('\n');}void putstr(char str[200]) //此算法部分情况下有BUG,还需进一步验证{ int a,b,c,i; a=0;b=0;c=0; for(i=0;;i++) { if(str[i]=='\0') { if(b<=a) { b=a; c=i-a; } break; } else if(str[i]!=' ') { a++; } else { if(b<=a) { b=a; c=i-a; a=0; } } } for(i=c;i<=b+c;i++) { putchar(str[i]); }}上面的一个函数是统计英文语句中最长的单词(不考虑标点符号),以空格作为标志进行统计,输出最长的那个单词。
但是在某些情况下会出错,例如,我输入 i am a boy 此时输出的为 boy(但是前面有个空格),而有些情况下,前面没有空格,按我自己设计的初衷是前面和后面都不应该有空格。
大侠们帮我看看吧,我实在是找不出这个算法里面的漏洞。
[解决办法]
- C/C++ code
#include <iostream>#include <stdlib.h>void main(){ void putstr(char str[200]); char a[200]; printf("请输入英文语句:\n"); gets(a); printf("其中最长的单词是:\n"); putstr(a); putchar('\n');}void putstr(char str[200]) //此算法部分情况下有BUG,还需进一步验证{ int a,b,c,i;//a表示当前的单词长度 b 表示最大的 长度 c表示 开始当前单词开始位置 当前i a=0;b=0;c=0; for(i=0;;i++) { if(str[i]=='\0' || str[i] == ' ') { if(a >= b) { c = i-a; b=a; } if(str[i]=='\0') { break; } a=0; //i-a } else { a++; } } for(i=c;i<=c+b;i++) { putchar(str[i]); }}
[解决办法]
- C/C++ code
if(b<=a) { b=a; c=i-a; a=0; }