Wnd_S 2018-04-09 04:24 采纳率: 100%
浏览 2600
已采纳

求大神修改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;   
}

展开全部

  • 写回答

5条回答 默认 最新

  • a414878523 2018-04-10 10:01
    关注
    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 损失匹配问题,求解答
  • ¥15 3500常用汉字书法体检测数据集下载
  • ¥15 odoo17在制造模块或采购模块良品与次品如何分流和在质检模块下如何开发
  • ¥15 Qt音乐播放器的音乐文件相对路径怎么写
  • ¥15 VB.NET利用摄像头拍照的程序
  • ¥15 linux下vscode设置不了字连体
  • ¥20 游戏mod是如何制作的
  • ¥15 关于#hadoop#的问题:按照老师上课讲的步骤写的
  • ¥20 有人会用这个工具箱吗 付fei咨询
  • ¥30 成都市武侯区住宅小区兴趣点