C语言怎么统计相同单词出现次数?

如题所述

输入要求:若干个以空格分割的单词序列,单词的总数不超过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]==32;j++);//如果串中是空格,则拼命跳过,不计
        while(k<N&&str2[j]!=32) //不是空格,且没有超出题目中的要求: 每个字串长度小于N.如果大于N,自动截除.
                str1[i][k++]=str2[j++];  //将输入行字串分割存放到结果数组中   
        str1[i][k]='\0'; //如果该串原来大于20,会被自动截除
        strC[i]=1;   //计数
        for(x=0;x<i;x++) //与前面的串比较 
            if(strncmp(str1[i],str1[x],N)==0)//调用库函数,不分大小写与前面的串相比,相同则返回0.    
            {
                strC[x]++; //相同,计数器数组增加
                i--; //该串为重复串,总串数不增加        
                break; //跳出for循环
            }      
            i++;   //无重复串,则总字串数增加
            k=0;
    }
    
    printf("结果:\n");  
    t=0; 
    for(;t<i;t++)//不超出总串数
        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等面向对象的编程语言有所不同。

温馨提示:内容为网友见解,仅供参考
无其他回答

C语言 统计相同单词出现次数
include <string.h> include <stdio.h> define MAX 100 typedef struct tagWordCounter { char word[20];int count;}WordCounter;WordCounter wc[MAX];int num=0;main(){ char wd[20];int i;char ch;while(1){ scanf("%s",wd);for(i=0;i<num;i++)if(strcmp(wd,wc[i].word)==0...

C语言 对任意一篇英文文章,统计其中每个单词分别出现了多少次,并可替换...
如果没有相同节点,说明单词第一次出现,将新建节点的cnt置1,并将节点插入链表。等所有单词都组成链表之后。再次遍历链表,只要cnt不等于-1的节点个数就是文章单词的数量,不等于-1的cnt值就是每个单词对应的出现次数 删除单词:只要把对应节点删除(如果删除的是该单词第一次出现的节点,把其cnt值保存...

如何用c语言完成统计一个句子中每个单词出现的次数啊?是用c语言,不要...
include <stdio.h> include <stdlib.h> include <ctype.h> include <string.h> typedef struct Word { char w[20];int k;struct Word *next;}pWord;int main(int argc, char *argv[]){ FILE *fp = fopen("input.txt","r");struct Word *Head = NULL;while (!feof(fp)) { char...

C语言小白求问。如何读取字符串文件,并根据不同长度的单词统计...
如想统计一段文件中的英文单词出现次数。需实现以下功能:一、遍历字符串,通过分割符号空格及标点符号获取单词数组。二、大小写转换,把数组单词全部转换为大写或者小写(识别同一个单词不同大小写)。三、遍历单词数组,累加统计每个单词数量。(可遍历到第一个单词作为当前统计对象,之后每遍历到相同单词...

C语言 统计一个单词在一个文件中出现次数,并将出现的次数重新输到文件中...
用fprintf(fp,"%s","word在这篇文章中出现7次");fp是你的文件指针 改一下:fprintf(fp,"%s%d%s","word在这篇文章中出现",occur,"次");

C语言统计一篇文件里出现最多的三个单词
\/\/统计单词出现频率 include <stdio.h> include <stdlib.h> include <string.h> struct Node{ int c; \/\/单词w程序次数 char w[20]; \/\/单词 struct Node *next;struct Node *pre;};char s[]=" ,;.?!:(\\"\\\\)['|]{\/}@#$&*+-=<~`_>0123456789\\12"; \/\/单词分隔符 \/\/在head...

...键盘输入若干英文单词,以”@@@”字符串作为结束,统计单词出现...
\/***\/int main(){WRD s[MAX];\/\/定义结构体数组,用来保存不重复的单词char t[21];int i=0,k,j;\/\/i:单词总数,初始值是0while(scanf("%s",&t)!=EOF) \/\/循环输入,"@@@"或者Ctrl+z结束循环 \/\/可以改为while(1),只能用"@@@""结束循环{ if(strcmp(t,"@@@")==0)\/\/...

C语言求单词的个数
i]==''来判断,如果两个单词直接有多个空格的话,就会多判断出单词数,所以修改为s[i]==''&&flag==0 5、最后一个单词后面没有空格的话,该程序会将最后一个单词漏掉,所以循环结束之后需要再判断flag是否为0,为0则说明有一个单词没有统计上,加上。6、代码书写规范就不说了。

用c语言编写输入一段英文,1 统计这段英文的单词数2 输入特定单词,统计...
printf("此段英文中该单词 %s 个数为:%d\\n",search,num);fclose(fp);remove("en.txt");return 0;} char * getword(FILE *fp){ char f,word[50];do{ int flag=0,i=0;while(flag==0){ f=fgetc(fp);if((f>='a'&&f<='z')||(f>='A'&&f<='Z')) word[i++]...

用C语言编程实现“单词统计”:统计某篇英文小说中某些单词的出现次数...
给你提供点思路吧 判断一个单词的标准是:单词开始:前一个字符为空格 单词结束:后一个字符为空格 依据这个标准来统计单词的出现次数 注意一点:最后一个单词的最后一个字母之后可能不是空格哦

相似回答
大家正在搜