C语言单词个数

Python014

C语言单词个数,第1张

问题1:

 你是想这样:

   从空格 i 处, 往后依次寻找, 找到第一个不是空格的 j ,找到则count++

   但实际效果是: 

   若 j 处不为空格,继续; 若 j 处为空格,结束for循环

   由于 j = i  所以for循环开始时 str[j] == ' ',所以会结束循环,所以count一直为0,word也永远不会++,这就是原因所在

     

问题2

  就算上面的代码你改OK了,但是还有一个问题你没注意

  从空格 i 处, 找到不是空格的 j 了,OK,

  但是下一个 i,居然是i++,

  请问按你这种算法,

  那 "are---ok\0"(用符号"-"代替空格),岂不是第一个单词被计数三次了?

  所以下一个i, 应该先 i = j, 再 i++

改法:(当然也有其他改法, 末尾判断字符串结尾处可能还有问题)

 

 #include "stdio.h"

 int main()

 { 

  char str[1000]

  int i, j, count = 0, word = 0

  gets(str)

 

  for( i = 0 str[i] != '\0' i++)

  {

           count = 0

           if(str[i] == ' ')

           {

                    j = i 

                    for(  str[j] == ' '  j++)

                    {

                             count++

                    }

   

                    if(count >= 1)

                    {

                             word++

                             i = j-1

                    }     

           }

  }

   

       printf("个数%d",word)   

       return 0

 }

给一个简单的例子:

#include<stdio.h>#define N 1000void main(){ char en[N][81] int i,j,num=0,n,state //num 用来统计单词的个数 //state 用来记录程序当前是否处于一个单词之中,初值为0,表示不在单词中,值为1,表示正处于在一个单词中

FILE *fp

fp = fopen("in.txt", "r")

int n =0

while(!feof(fp)){fgets(en[n++], N, fp) //输入英语短文 } for(i=0i<ni++){state=0//设每行的开始都是单词的开始for(j=0en[i][j]!='\0'j++){ if(en[i][j]==' '){state=0 //判断 en[i][j] 是否为空格字符 } else if(state==0){state=1 num++ }} } printf("The number of words is %d\n",num)}

输入要求:若干个以空格分割的单词序列,单词的总数不超过1000个,每个单词的长度不超过20个英文字符。这里单词不区分大小写,例如 Hello与hELLo被认为是相同的单词。

#include <stdio.h>

#include <string.h>

#define M 1000

#define N 20

void main()

{

    char str1[M][N]//单词字串结果存放数组

    char str2[M]//输入串或者用char *str2也可,这样可以

    int strC[M]//单词字串计数数组.对应每个单词串,拥有一个计算器

    int i=0,j=0,k=0,t=0,x=0

    gets(str2)//接受行输入

    t=strlen(str2)+1//计算该行中总字符数

    printf("输入字串为:%s\n",str2)

    

    while(j<t)  

    {

        for(str2[j]==32j++)//如果串中是空格,则拼命跳过,不计

        while(k<N&&str2[j]!=32) //不是空格,且没有超出题目中的要求: 每个字串长度小于N.如果大于N,自动截除.

                str1[i][k++]=str2[j++]  //将输入行字串分割存放到结果数组中   

        str1[i][k]='\0' //如果该串原来大于20,会被自动截除

        strC[i]=1   //计数

        for(x=0x<ix++) //与前面的串比较 

            if(strncmp(str1[i],str1[x],N)==0)//调用库函数,不分大小写与前面的串相比,相同则返回0.    

            {

                strC[x]++ //相同,计数器数组增加

                i-- //该串为重复串,总串数不增加        

                break //跳出for循环

            }      

            i++   //无重复串,则总字串数增加

            k=0

    }

    

    printf("结果:\n")  

    t=0 

    for(t<it++)//不超出总串数

        printf("%s,%d\n",str1[t],strC[t])   

}

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。   目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。