求大神修改c++代码。统计一篇英文文章中所有单词出现次数。

题目要求:
要求统计一篇英文文章中的所有单词出现的次数,按照这些单词出现的顺序依次打印它们以及各自出现的次数。

本人已写出能实现统计的代码,但目前仍有一些无法解决:
1.如何不统计比如“word,”后面的“,”使之不被统计为“word,”而是“word”。
2.如何使如“word,and”不被统计为“word,and”而是当有“,”号时如我代码中空格进行跳过。正确被统计应该为“word”与“and”。
3.不只是“,”其他常用英文符号如“。”“!”“ ' ”“?”“...”等等做到如上要求。
4.求对修改的地方进行注释十分感谢!!!十分感谢求大神支援!!

代码:


#include <iostream>
#include <string.h>
#define X 1000
#define Y 45
using namespace std;

int main()
{
    char str1[X][Y];
    char str2[X];
    int str3[X];
    int i=0,j=0,k=0,t=0,x=0;
    cout<<"请输入英文语句:"<<endl;
    gets(str2);
    t=strlen(str2)+1;
    cout<<"---------------"<<endl<<"你输入的语句为:"<<endl<<"---------------"<<endl<<str2<<endl<<"---------------"<<endl;

    while(j<t)  
    {
        for(;str2[j]==32;j++);
        while(k<Y&&str2[j]!=32)     
                str1[i][k++]=str2[j++];    
        str1[i][k]='\0'; 
        str3[i]=1;  
        for(x=0;x<i;x++) 
            if(strncmp(str1[i],str1[x],Y)==0)
            {
                str3[x]++; 
                i--;        
                break; 
            }      
            i++;  
            k=0;
    }


    cout<<"统计结果为:"<<endl;  
    t=0; 
    for(;t<i;t++)
        cout<<str1[t]<<"总共有 "<<str3[t]<<" 个"<<endl;   
}
0

6个回答

#include <iostream>
#include <cstring>
#include <cstdio>
#define X 1000
#define Y 45
using namespace std;

int main()
{
    char str1[X][Y];
    char str2[X];
    int str3[X];
    int i=0,j=0,k=0,t=0,x=0;
    cout<<"请输入英文语句:"<<endl;
    gets(str2);
        #这里不知道为什么要+1,去掉了
    t=strlen(str2);
    cout<<"---------------"<<endl<<"你输入的语句为:"<<endl<<"---------------"<<endl<<str2<<endl<<"---------------"<<endl;

    while(j<t)
    {
        for(;str2[j]==32;j++);
        while(k<Y&&str2[j]!=32&&str2[j]!='\0')
                    #不明白单词具体要求,这里写的是假设当前不是字母就不算在单词里,如果单词中间可能出现其他字符,再加上对str2[j+1]的判断,或者判断是否是某些特殊字符如逗号等
                if (('a' <= str2[j] && str2[j] <= 'z') || ('A' <= str2[j] && str2[j] <= 'Z'))
                       str1[i][k++]=str2[j++];
                else
                        j++;
        str1[i][k]='\0';
        str3[i]=1;
        for(x=0;x<i;x++)
            if(strncmp(str1[i],str1[x],Y)==0)
            {
                str3[x]++;
                i--;
                break;
            }
            i++;
            k=0;
    }


    cout<<"统计结果为:"<<endl;
    t=0;
    for(;t<i;t++)
        cout<<str1[t]<<"总共有 "<<str3[t]<<" 个"<<endl;
}

1
a414878523
a414878523 不好意思注释的地方不是#是//,给你添加注释的时候脑抽了忘记这是在写C语言了
一年多之前 回复
 #include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
int main()
{
    char str[1000];
    int i=0;
    while((str[i]=getchar())!='\n')
    {
        i++;
    }
    str[i]='\0';
    int num=0,n1[100],n2[100];
    string stri1[100]= {""},stri2[100];
    n1[0]=-1;
    for(i = 0; str[i]!='\0'; i++)
    {
        if(str[i] == ' ')
        {
            num++;
            n1[num]=i;
        }
    }
    num++;
    n1[num]=i;
    cout<<"共有"<<num<<"个单词"<<endl;
    for(i=0; i<num; i++)
    {
        for(int m=n1[i]+1; m<n1[i+1]; m++)
            stri1[i]+=str[m];
    }
    int m=0;
    bool f=true;
    for(i=0; i<num; i++)
    {
        for(int l=0; l<m; l++)
        {
            if(stri2[l]==stri1[i])
            {
                f=false;
                break;
            }
            else
            {
                f=true;
            }
        }
        if(f)
        {
            stri2[m++]=stri1[i];
        }
    }
    for(i=0; i<m; i++)
    {
        int l=0;
        for(int n=0; n<num; n++)
            if(stri2[i]==stri1[n])
                l++;
        n2[i]=l;
    }
    int sum=0;
    for(i=0; i<m; i++)
    {
        cout<<stri2[i]<<' '<<n2[i]<<endl;
        sum+=n2[i];
    }
    return 0;
}
0

#include
#include
#define X 1000
#define Y 45
using namespace std;

int main()
{
char str1[X][Y];
char str2[X];
int str3[X];
int i=0,j=0,k=0,t=0,x=0;
cout<<"请输入英文语句:"<<endl;
gets(str2);
t=strlen(str2)+1;
cout<<"---------------"<<endl<<"你输入的语句为:"<<endl<<"---------------"<<endl<<str2<<endl<<"---------------"<<endl;

while(j<t)  
{
    for(;str2[j]<65||(str2[j]>90&&str2[j]<97)||str2[j]>122;j++);//跳过所有非英文字母
    while(k<Y-1&&((str2[j]>64&&str2[j]<91)||(str2[j]>96&&str2[j]<123)))//接受英文字母     
            str1[i][k++]=str2[j++];    
    str1[i][k]='\0'; 
    str3[i]=1;  
    for(x=0;x<i;x++) 
        if(strncmp(str1[i],str1[x],Y)==0)
        {
            str3[x]++; 
            i--;        
            break; 
        }      
        i++;  
        k=0;
}


cout<<"统计结果为:"<<endl;  
t=0; 
for(;t<i;t++)
    cout<<str1[t]<<"总共有 "<<str3[t]<<" 个"<<endl;   

}

0
houly16
houly16 回复weixin_39115188: 你把测试样例发一下
一年多之前 回复
weixin_39115188
Wnd_S 回复weixin_39115188: ","号的问题,如何判定这些符号和英文单词不是同一个字串呢
一年多之前 回复
weixin_39115188
Wnd_S 大神但是这样还是无法解决记录单词时后面跟着比如
一年多之前 回复

我觉得这个问题你自己应该好解决啊,你判断条件改为'A'<=x<='Z'&&'a'<=x<='z就可以吧,其他不管什么字符不都不用管了吗?

0
 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *  chunGe_word(char *str, char *temp,int temp_lenght)
{
    /*
    从str处开始,非字母跳过。遇到字母,作为每个单词的起点
    直到遇到非字母时结束一个单词的提取。并返回结束位置。
    如果这个单词太长,超过了temp 的容量 则超过的丢弃。
    找不到匹配的单词,就返回NULL;

    思路:利用两个辅助指针来挖单词。一个指向头部 一个指向尾部。他们的之间的就是单词
    */
    if(str==NULL)
    {
        return str;
    }
    int i = 0;
    char *buf = str;
    char *star = NULL;//开始的位置标记
    char *end = NULL;//结束的位置标记
    while (*buf)
    {
        if (*buf >= 'A'&&*buf <= 'Z' || *buf >= 'a'&&*buf <= 'z')
        {
            star = buf;//找到单词开始处
            break;
        }
        buf++;
    }
    while (*buf)
    {
        if (*(buf + 1) == 0)//处理到达尾部的情况。
        {
            end = buf+1;//指向结束的标志
            break;
        }
        //这里多了一个 ‘!’表示不是字母就结束了单词的判断。
        //但有很多例外 比如 It's '算单词的一部分啊
        //还有一些特殊的情况,就不处理了。需要的时候在这里升级吧。 
        if (!(*buf >= 'A'&&*buf <= 'Z' || *buf >= 'a'&&*buf <= 'z' || *buf == 0x27/* ' =0x27 */))
        {
            end = buf;//这里单词结束。
            break;
        }
        buf++;
    }
    int lenght = (int)(end - star);//单词长度。两个指针的差值
    if (lenght> temp_lenght - 1)//如果超过容量
    {
        memcpy(temp,star, temp_lenght - 1);//留一个结束符
    }
    else
    {

        memcpy(temp,star, lenght);
        temp[lenght] =0;//处理短与容器的值,防止数据污染。假设temp[4] 第一次放进去了“int”
                                           //第二次放进去短的 “in” .则还会输出"int"  所以这里lenght+1 就应该结束了
                                          //容器的刷新应该属于底层的活,不应该让上层业务去保证temp的正确性
    }
    return end;

}

int  main()
{

    char *str= "the furthest distance in the world Is not between life";
    char  temp[20] = { 0 };
    while (*str)
    {
        str = chunGe_word(str, temp, sizeof(temp));
        printf("%s\n", temp);
        //这里实现了每个单词的提取,直到结束
        //可以把temp 放进一个 单词数组里,进行记数。
        //下面的感觉很简单,就没写了。
    }

    system("pause");
}
0

图片说明

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
统计一篇文章中每个单词出现的次数
package cn.mdln.demo; import java.util.Map; import java.util.Set; import javax.swing.text.html.HTMLDocument.Iterator; import java.util.HashMap; /*  * 统计一篇文章中每个单词出现的次数  */ public class
c语言程序统计英语文章中的单词出现不同的单词
c程序!!#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { FILE *fp; char **word, ch, *buf; int length, i, j, k, sign_w, same, number_w = 0, num = 0; if((fp = fopen("text.txt", "rb")) == NULL) { printf("cannot open text.txt!\n"); return 0; }
Java实现统计一篇文章中每个单词出现的次数
使用Java正则表达式 和HashMap(哈希表)统计一篇文章中的每个单词出现的次数(去除标点符号和空格) import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.HashMap; import java.util.Iterator; impo
统计一篇txt文档(英文)中各英文字母出现的次数及概率
此程序的功能是实现对一篇英文文档中26个英文字母(区分大小写)进行计数,并计算其出现的概率。将结果打印到另一个txt文档中,需要注意的是文档中不能出现回车符。
统计一篇超过10G的文章中每个单词出现的次数
统计一篇超过10G的文章中每个单词出现的次数,基本代码思路如下:(代码具体细节思路见以下代码的后续分析) (实现过程中存在一定问题,后续完善) import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.i...
python统计英文文章中单词出现的次数
word=&quot;I'm a boby, I'm a girl. When it is true, it is ture. thit are cats, the red is red.&quot; word=word.replace(',','').replace('.','') word=word.split() print(word) setword=set(word) for i in setword: ...
C语言实现统计文章的单词数目(实验报告+源代码)
(1)实验内容 编写一个程序。功能是读入一篇英文文章,统计该文章中每个单词的出现次数,并输出出现次数最多的前5个单词及其出现次数。 注意: ① 单词不区分大小写,比如:The和the是相同的单词。 ② 按照英文书写习惯,过长的单词遇到换行时,会加入连字符“-”。比如:“international”遇到换行时可能会写为“intern-ational”,统计时要注意除去连字符。
python 统计一篇英语文章中每个单词出现的次数
""" 统计一篇英语文章中每个单词出现的次数 """ import string def get_dict_word_times(file): """构建字典{单词: 次数}""" list_word_with_punctuation = file.read().split() # 去掉标点,不区分大小写 list_word = [word.strip(st...
如何用c语言从键盘上读取一段英语短文,并统计出各个单词的出现个数
首先将这个问题分解成几个问题: 1.从键盘上读取文章。 2.将文章中的单词提取 3.去除重复的单词 4.统计单词的个数 一:从键盘上读取文章 1)可以有俩个方法。1.定义一个一维字符数组进行读取以及存储。2.定义一个二维字符数组读取以及存储。 本文中主要对第二个方法进行介绍 char m[10][30]={'\0'};            //定义一个二维的字符数组,并对其进行初...
统计英文文章的单词出现次数
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; public class Test { public sta...
统计一篇文档中每个单词出现的次数,频率
从一片文档中提取出所有的单词(word),然后计算每个单词出现的频率(次数),按照一定的次序将排序好的单词以“word(频率)”的形式打印出来。 可以按照频率高低,或者单词顺序打印所有出现的单词。
topK问题——统计一篇很长的英文文章中频次出现最高的10个单词
  上篇讲述了topK问题的N个数中最大的前K个数,本篇则讲述统计一篇很长的英文文章中频次出现最高的10个单词。   例题2:统计一篇很长的英文文章中频次出现最高的10个单词。 思路:  分治法 + hash + 小根堆 (1) 定义一个关联容器hash_map&amp;lt;string,int&amp;gt;,用于统计英文文章中每个单词出现的次数;定义一个vector&amp;lt;hash_map&amp;lt;...
统计一篇英文文章中单词出现的频数
1.题目内容:如何统计一篇英文文章中单词出现的频数,依次从键盘中输入该文章。 2.思路:使用map一一映射 3.程序清单: #include&amp;lt;iostream&amp;gt; #include&amp;lt;string&amp;gt; #include&amp;lt;map&amp;gt; using namespace std; int main() { map&amp;lt;string, int&amp;gt; word...
输入200字符以上英文文章,统计各字母出现次数并输出
键盘输入200字符以上英文文章,统计各字母出现次数并输出(每个字母、出现次数占一行),结束时以响铃(07H)加以提示,请画出框图并编写完整程序。
java读取一篇英语文章并且统计出单词出现的频率并从高到低输出
package com.amt.crm.controller; import java.io.BufferedReader; import java.io.FileReader; import java.util.*; public class test2 { public static void main(String [] args) throws Exception { ...
java统计文章中单词出现的次数
TreeMap为有序映射表,默认按照键Key排序,此问题的关键点是让Map按照Value值排序。用HashMap存储单词和单词的次数,再用Collections.sort()方法排序出来。import java.util.*; public class WordCountTest { public static void main(String[] args) { //读取 Map
python3学习笔记之三——统计英文文章中出现次数最多的单词前三
思路:英文文章中的标点符号的处理,单词大小写的处理,再将单词通过字典的统计出现次数,最后用sorted()排序#利用maketrans函数将标点符号映射为空格table = str.maketrans(',.!&quot;?:[]-',' ')#打开需要统计的文件f = open(r'C:\Users\CryptFiend\Downloads\python\1.txt')file1 = f....
统计一篇文章中每个单词的个数
统计一篇文章中每个单词的个数 小程序 源代码 很好用。 界面清秀柔和。
统计英文文章中出现的单词数量(基于字节实现)
字数 统计 字节
java基础——统计某篇文章中每个单词出现的次数
java基础——统计某篇文章中每个单词出现的次数 找到目标txt文件, 通过创建字符输入流对象,创建缓冲流, 依次读取每行字符, 追加至整篇文章字符, 通过正则表达式(一个或多个非单词字符)分隔,得到独立的单词, 遍历字符串数组, 将单词作为Map(无须不重复)的key,出现的次数作为Map的值。 如果map中不包含此单词,其value为1,否则value+1。通 过将map转化...
java 分析英文文章,并统计每个字母出现的次数
java 分析英文文章,统计每个字母出现的次数,按自己设定的格式输出到文件件里,方便分析与转换,带数据样例。
统计一篇英文文章单词个数,取出出现频次前10的单词(Python实现)
题目: 用python实现统计一篇英文文章内每个单词的出现频率,并返回出现频率最高的前10个单词及其出现次数。 常规解法 怎么判定单词? 1 不是字母的特殊字符作为分隔符分割字符串 (避免特殊字符的处理不便,全部替换成&quot;&quot;) 2 正则分割 3 遍历字符串,取每个word 4 正则匹配 怎么统计个数? 将wordlist的word和word的个数放入dict,排序 import re with op...
统计一篇文章中各英语单词出现的频数
package com.icinfo; import java.io.*; import java.util.*; /** * 统计一个文件中各词出现的频率,并打印 */ public class FileWordCount { // 使用HashMap来存储单词的频率 Map&amp;lt;String, Integer&amp;gt; wordCount = new HashMap&amp;...
线性表存储单词并统计出现次数
//用线性表(数组或链表)存储单词,以实现单词出现次数统计。 #include #include #include #define MaxSize 20 typedef struct LNode {  char ch[MaxSize]; //保存单词,最长单词20个字母  int num; //保存出现次数 }Record; //单词重复检测 bool DupliIf (char a[],Reco
统计一个文件文件中,各单词出现的次数(c++)
用c++中的关联容器map来统计一个文件文件中,各单词出现的次数(c++),其中各单词义空格分开。
算法之"统计一篇文章里不同单词的个数"
输入: 有多组数据,每组一行,每行就是一篇文章。每篇小文章由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。 输出: 每组输入一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。 例如: hello world hello hi haha hh  you are great nice of you # 输出为: 每一行单词个数为: 5 3 3 代码...
Python 编程小问题汇总(一)
Python 编程过程中遇到的小问题及解决方案整理。
统计一个英文文本的单词出现的频率(有标点符号的)
该程序为单词频率统计,可读取一个英文文本文件(含标点符号),可在屏幕上输出个单词在英文文本中出现的次数。 /*词频统计*/ /*汪强*/ #include<stdio.h> #include<stdlib.h> #include<string.h> #define i 1000 int b; struct word { char w[20]; int num;}s[i]; void file
Python统计txt文件中的英文单词个数
函数:example.strip()分离此行的单词sum()函数的第一个参数是一个列表(list),第二个参数可以直接省去python风格的代码只要一行:sum([len(line.split()) for line in open("C:\\Users\\dell\\Desktop\\123.txt", 'r')])
[Trie树] 统计英文文本中单词出现的个数 - C语言实现 - 考虑数字、英文
【英文文本】 However, after reaching the shore there are plenty of challenges waiting for him.&quot;The biggest challenge now is learning to walk again! My biggest fear when I was coming out of the water and ...
在一篇英文文本中,查找某个单词的出现次数
fputc 函数原型:int fputc(int c, FILE *fp); 功能:把一字节代码c写入fp指向的文件中 返回值:正常,返回c;出错,为EOF(-1) fgetc 函数原型:int fgetc(FILE *fp); 功能:从fp指向的文件中读取一字节代码 返回值:正常,返回读到的代码值;读到文件尾或出错,为EOF(-1) feof 函数原型:int feof(FI
给定一篇英文文章,找出其中使用频率最高的英语单词。
给定一篇英文文章,找出其中使用频率最高的英语单词。 这道题,对于学java的练习的学友来说是一道不可缺少的题目,这一道题,我刚一开始接触的时候认为挺简单的一道题,但是在做的时候发现了很多问题,其中对于map的运用,对于遍历的操作,以及对键值对的理解等。
查找一段英文中各个单词出现的次数
package test.com; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class test2 { public static void main(String[] args) { System.out.println("请输入一段英文"); Scanner
统计英文文章中的字符串个数
/*  * 功能:以字符串的形式提供给你一段英文文章,请编写一个程序。该程序将统计指定字符串中每个单词出现的次数。 思路:先替换文章中的标点符号为空格;再根据空格分割字符串,最后放入hashmap集合中,遍历hasnmap即可。  */ package com.zyy.stringcode; import java.util.HashMap; import java.util.
java 统计文章中每个单词出现的次数
思路:扫描文章,使用正则表达式分割出一个个单词,然后把这个单词放到map&amp;lt;String,Integer&amp;gt;集合中作为key,同时它的value置1,以后每扫描到一个单吃都去检查map里面有没有这个单词,如果有value就加1,然后再放回map中更新value。package pattern; import java.io.File; import java.io.FileNotFoun...
C++读取一文本文件并进行单词统计结果
能从硬盘上读取一文本文件(一篇英语文章),将这篇文章的内容使用适当的数据结构保存起来,能够统计出各个单词出现的频率、和查询特定的单词。
c语言小案例:获取文章中单词总数及含有1个字母到10个字母的单词的数量
1 字数统计(10分) 题目内容: 你的程序要读入一篇英文文章,然后统计其中的单词数来输出。需要统计的数据为: 总的单词数量; 含有1个字母到10个字母的单词的数量。 单词和单词的间隔是由以下标点符号形成的:空格、tab、回车换行、逗号、句号、问号、括号、双引号和冒号。 这些符号不能被计入单词的长度中。因此,对于下面的句子: “What you see is a very he
【C++训练】统计一篇英文文章中单词的个数与行数
#include&amp;amp;lt;iostream&amp;amp;gt; #include&amp;amp;lt;fstream&amp;amp;gt; using namespace std; int wordtest(char a) { return ((a &amp;amp;gt;= 'a'&amp;amp;amp;&amp;amp;amp;a &amp;amp;lt;= 'z') || (a &amp;amp;gt;= 'A'&amp;amp;amp;&am
Python统计.txt文本中每个英文单词个数
目录 需求: 实现: 需求: 给定一个word.txt文件,统计文件中每个英文单词出现的次数,保存在word2.txt中。 实现: word.txt: Python2.7下的统计脚本: import collections import re def word_cal(): with open('word.txt','r') as fp: cont...
python学习之文章中单词出现频率统计
思路:统计一篇文章中单词出现的次数,首先应该知道该文章中,有多少个单词(去重后),然后再统计单词在文章中的出现频率。这里使用最简单的方式来实现该功能。基础:读者应该已经掌握python的主要数据结构的用法,——字典、列表、元组与集合。多数的函数和方法的注释已经在源代码中注释,这里对sorted()函数进行一下特别说明。python中对sorted()函数做出的解释如下所示(可以通过help(fun...