C++编程 编写函数计算一个英文句子中的单词个数

题目内容:
编写函数计算一个英文句子中的单词个数。
输入格式:
一个最长500个字母的英文句子,不包含数字和特殊字符,但可能包含一些英文标点符号。标点符号独立出现时不视为一个单词。
输出格式:
该句子的单词个数

【思路解析】
  计算英文句子中的单词个数通常有两种办法:一种是指定固定的分隔符,比如指定空格或者逗号或其它符号为分隔符,除此之外的所有字符都会被认定为单词的有效字符,比如指定空格为分隔符,则I  love  her(rose).这个句子中只有3个单词,因为her(rose)之间没有空隔隔开,会被认为是一个单词。另一种是只承认字母为单词的有效字符,除此之外的所有字符都会被认定为分隔符。比如同样是上面的句子,用第二种办法就会统计出4个单词,因为her和rose之间被一个括号隔开,会被认为是两个单词。但是不管是哪一种,其实在编程上思路都是一样的。
  统计一个字符串中单词的个数,最关键的问题是如何使有效字符不重复统计。比如碰到love这个单词,检测到l是一个有效字符,单词个数增加1,但紧接着是o也是有效字符,但单词的个数就不能再增加1,否则就会造成重复统计。这可以用一个while语句来实现跳过。整体的思路是这样的:
  对字符串中所有的字符一个个检测,直到字符串结束为止,如果碰到有效字符,单词个数增加1,然后用while语句跳过所有有效字符,不断重复这个过程就可以统计出单词的个数。
  下面给出两种不同方法的代码,分别写成一个独立的函数,具体如下:

【程序代码】
#include <iostream>             //控制台操作头文件
#include <string.h>             //字符串操作头文件 
//---------------
int WordCount(char S[],char a)  //统计单词个数函数(a是分隔符)
{int i=0,n=0;                   //循环变量和单词个数
 while(S[i]!='\0')              //逐个检测串里的字符
      {if(S[i]!=a&&S[i]!='\0')  //如果碰到有效字符
         {n++;                  //单词个数加1
          while(S[i]!=a&&S[i]!='\0') i++;}//跳过后面一起的有效字符
       else i++;}        //如果没碰到有效字符检测下一个
return n;}           //函数返回单词个数
/*如果指定了固定分隔符,那就是除了分隔符和结束符其它都是有效字符*/
//---------------
int WordCount1(char S[])        //统计单词个数函数(不指定分隔符)
{int i=0,n=0;                   //循环变量和单词个数
 while(S[i]!='\0')              //逐个检测串里的字符
      {if((S[i]>='a'&&S[i]<='z')||(S[i]>='A'&&S[i]<='Z'))
       /*只承认a-z或者A-Z之间的字符为单词的有效字符*/
         {n++;                  //单词个数加1
          while((S[i]>='a'&&S[i]<='z')||(S[i]>='A'&&S[i]<='Z'))
                 i++;}     //跳过后面连在一起的所有有效字符
       else i++;}        //如果没碰到有效字符检测下一个
return n;}                      //函数返回单词个数
//---------------
int main()                              //主函数
{int n;                                 //单词数
 char chr[255];                         //英文句子字符串
 for(;;)                                //设置一个无穷循环
    {printf("请输入英文句子(END结束):");//输入提示
     gets(chr);                         //接收一个英文句子
     /*因为句子中可能含有空格,所以要用gets函数不能用scanf函数*/
     if(strcmp(chr,"END")==0) break;    //输入END退出循环结束函数 
     n=WordCount(chr,' ');              //获得单词数(空格分隔符)
     printf("以空隔分共有%d个单词\n",n);//输出单词个数
     n=WordCount1(chr);                 //获得单词数(不指定分隔符)
     printf("以字母分共有%d个单词\n\n",n);}//输出单词个数
 printf("\n");                          //换行
 system("PAUSE");                       //暂停屏幕查看结果
 return 0;}                             //结束程序

【运行结果】
以上代码在DEV C++上运行通过,截图如下:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-12
//#include "stdafx.h"//vc++6.0加上这一行.
#include <iostream>
using namespace std;
int main(void){
    int i,ws;
    char w[501]=" The quick brown fox jumps over a lazy dog. This is a sentence in a book called \'Q\'.";
    for(ws=i=0;w[i];i++)
        if(isalpha(w[i]) && (i==0 || !isalpha(w[i-1])))
            ws++;
    cout << "The result is " << ws << endl;
    return 0;
}

本回答被网友采纳
相似回答