欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

检测字符串中有多少个单词改新--C语言谭浩强版例6.8

程序员文章站 2022-04-12 20:39:55
例6.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开   原解题思路:     从第一个字符开始逐个字符进行检查,判断此字符是否是...
例6.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开

 

原解题思路:

    从第一个字符开始逐个字符进行检查,判断此字符是否是新单词的开头。判断是否出现新单词,可以由是否有空格出现来决定。如果测出某一个字符为非空格,而它的前面的字符是空格,则表示新的单词开始了。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char string[81];
    int i, num=0,word =0;
    char c;
    gets(string);

    for(i=0; (c=string[i])!='\0'; i++)  //只要不是字符'\0'就继续循环
    {
        if(c==' ')
            word=0;
        else if (word==0)
        {
            word=1;
            num++;
        }
    }
    printf("There are %d words in the line.\n", num);
    return 0;
}

 

 

 

改新版思路:

    单词后面出现一个不是字母的字符,则这个单词结束。扩展了字符串中的标点

 

/******************************************************

6.8   Count how many words

Plan:
    If a charactor is not a letter, and before it there is a letter,
count add

CREATE----------------------------
By:     Idooi Liu
Time:   2015/09/27-1022
----------------------------------

******************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool ifALetter(char charactor);

int main(void)
{
    int i,  number=0;
    char stringMe[100];

    gets(stringMe);

    for(i=0; i<100; i++)
    {
        if(stringMe[i+1]=='\0')           //出现字符'\0'结束循环
        {
            if(ifALetter(stringMe[i]))
                number++;
            break;
        }

        //单词的最后一个字符判断,下一个字符不是字母,单词结束
        if(ifALetter(stringMe[i]) && !ifALetter(stringMe[i+1])) 
            number++;
    }
    printf("There are %d words in the line.\n", number);

    getchar();
    return 0;
}

//判断字符是否是字母
bool ifALetter(char x)
{
    if((x>64 && x<91) || (x>96&&x<122))
        return true;
    else
        return false;
}