首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于计算单词长度的算法解决方案

2012-09-17 
关于计算单词长度的算法C/C++ code#include stdafx.hvoid main(){void putstr(char str[200])char a[20

关于计算单词长度的算法

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;            } 

热点排行