C语言统计单词个数

Python022

C语言统计单词个数,第1张

Q:输入一串字符串,输出其中有多少个单词。 

Eg:Good Wishes 

A:

#include <stdio.h>#include <string.h>#define SIZE 20int main()

{    char str[SIZE]={'\0'}   int count=0

printf("plz input the string\n")

gets(str)

puts(str)   int length = strlen(str)   for (int i=0i<lengthi++)

{

if(str[i]!=' ')

{            count++           while(str[i]!=' '&&str[i]!='\0')

{

i++

}

}

}

printf("%d\n",count)   return 0

}

‘\0’和‘0’的区别: 

在c语言中,它们都是字符,都用对应的ASCII码来存储。例如第一个ASCII码,0,对应字符为(Null),就是 ‘\0’,即空字符。我们在c语言中判断一个字符串是否结束的标志就是看是否遇到‘\0’,如果遇到‘\0’,则表示字符串结束。字符‘0’和数字0的区别:前者是字符常量,后者是整形常量,但是字符常量可以像整数一样在程序中参与相关运算。

扩展资料

字符串所有字符,如果当前字符不为空,单词数+1,再嵌套一个while循环,判断当前单词是否结束。

#include <stdio.h>

#include <string.h>

int count_words(char* s)

{

int len=strlen(s)

int count,i

for(i=0i<leni++)

{

if(*(s+i)!=' '){  // 如果当前代码不为空

count++ //单词数+1

while(*(s+i)!=' '&&i<len)  //判断当前单词是否结束

i++

}

}

return count

}

int main()

{

char* a="i love you"

printf("%d",count_words(a))

}

根据英语的书写习惯,在每个单词前后都会有空格分隔。 所以可以依据空格来划分单词。

不过,由于空格可能存在连续多个,所以仅统计空格数是不可以的,需要更复杂一些的算法。

一、算法设计:

核心思想是通过一个flag,来确定单词的起始, 每出现一个单词的起始,则表示存在一个单词。 这样统计出现的单词起始个数,即可获得单词总数。

1、flag初始为1;

2、遍历字符串。

3、对于每个字符,如果出现非空格字符,且flag为1,则为单词起始,累加计数器。同时赋值flag为0。

4、在flag为0情况下,如果出现空格,表示上一个单词已经结束,设置flag为1。

5、 遍历结束后输出结果。

二、参考代码:

#include <stdio.h>

int func(char *s)//计算单词数函数

{

    int i,n=0,flag=1

    for(i = 0 s[i] i ++)//遍历

    {

        if(flag == 1)

        {

            if(s[i] != ' ')//单词起始

            {

                n++

                flag = 0

            }

        }

        else if(s[i] == ' ')//上一个单词结束。

            flag = 1

    }

    return n//返回结果。

}

int main()

{

    char s[200]

    

    gets(s)//输入字符串。

    

    printf("%d\n", func(s))//调用函数,计算并输出结果。

    return 0

}

C语言:统计输入的一行英文句子中的字母及单词个数,带注解!

//通过键盘输入一行英文句子,统计其中的英文字母和单词的数量,单词之间用空格分开(标点符号不算单词);

#include<stdio.h> 

#include<string.h>

#include<stdlib.h>

main()

{

char string[100]//根据拟从键盘输入的字串的长度需要适当调整,要避免输入的长度超出设定的范围。

char c

int i, num=0,sum=0,word=0//定义 word 用来指示一个单词是不是结束或新单词是否开始

printf("请从键盘输入一行需要查询的英文句子,进行单词数量统计:\n\n")

gets(string)   //从键盘获得输入的字符串;

//以下统计句子中的英文字符个数;

for(i=0(c=string[i])!='\0'i++) //for循环语句,遍历句子中的每个字符;初始化i=0;若字符c!='\0',即未到达结束符'\0'的话,执行i++

{

if(('A'<=string[i]&&string[i]<='Z')||('a'<=string[i]&&string[i]<='z'))

sum++  //以上为条件句,如果字符在A~Z,a~z 范围之内的话,则执行sum++,累加英文字母个数

}

//以下统计句子中的英文单词个数;

for(i=0(c=string[i])!='\0'i++) //for循环语句,遍历句子中的每个字符;初始化i=0;若字符c!='\0',即未到达结束符'\0'的话,执行i++

{                              //'\0'用作字符串的结束符。它的ASCII数值是0。

if(c<'A'||c>'Z'&&c<'a'||c>'z')   //设定条件:如果字符 c 遇到A~Z和a~z范围之外其它符号字符的话,包括遇到空格' ';

word=0      //上面条件为真时,执行这里,置word=0,表示未遇到单词,或,一个单词已结束,同时也意味着要开始遇到下一个新单词

else if(word==0)  //当条件(word==0)为真,执行下面花括号里面的语句;当word==0时,表示未遇到字母,即未遇到单词,或上一个单词已结束;

{

word=1   //那么置word=1,即,表示下一个新单词开始,

num++   //执行num++,累加英文单词的个数

}

}

printf("\n")

printf("您输入的这句英文句子中共包含%d个英文字符,%d个英文单词。\n",sum,num)

}

示例:输入语句:  Hello ! My friend , how are you ? (注意单词的前后有空格)

C语言进阶:[14]统计单词个数

对一段英文文章进行单词统计,如果刚接触这样的问题,感觉比较棘手。要把问题分解开,每一个小问题解决了,然后进行归并,大问题也就解决了。首先单词是以字符开始,并且连续个字符,直到下一个字符不是字符结束,并且这个字符不能是数字字符。核心问题就是找出一个单词。

查找单词的代码如下:

首先查询到第一字符,有可能是单词,然后连续查找字符,直到遇到第一个不是字符的字符,并且这个字符在本编程中是空字符和标点符号,还得考虑遇到字符串结束符\0。在代码中难得部分是字符串指针的处理即返回的是下一个可能是单词的查找开始位置。例如

h  e  l  l  o  空格  w  o  r  l   d

0  1  2  3  4    5   6  7  8  9   10

第一次查找,i值指向了空格即i=5,传过来的索引j指向h,即索引为0,那么结果j应该指向空格即j=5,表达式为j= j+ (i-(e的索引)1 + 1(数量差一)) = j+ i。主程序代码是:

主程序主要是调用单词查找函数,每次更新索引值,直到字符串查找完毕。

结果如下:

该程序的缺点是没有统计单词的开始和结束位置。