码迷,mamicode.com
首页 > 其他好文 > 详细

英文文章

时间:2015-12-27 06:13:36      阅读:650      评论:0      收藏:0      [点我收藏+]

标签:

对任意一篇英文文章,统计其中每个单词分别出现了多少次,并可替换指定的单词。
【功能要求】
(1)英文文章以文件形式输入。
(2)统计结果保存为文件。
(3)对单词进行替换时,允许用户选择全部替换,或逐个替换。替换完成后,将文章存盘。

  1 #include<stdlib.h>
  2 #include<stdio.h>
  3 #include<vector>
  4 #include<fstream>
  5 #include<string> 
  6 using namespace std;
  7 
  8 const int Num = 1000;//文章不同单词的最大数目
  9 int num_word = 0;//单词的个数
 10 vector<string>array_s;//存放文章里面的单词
 11 vector<string>all_content;//存放文章所有的内容
 12 struct Data{
 13     string data;//单词
 14     int count;//单词在文章出现的次数
 15 };
 16 
 17 Data WordNum[Num];//存放单词以及单词出现的次数
 18 
 19 
 20 //判断是否是字母
 21 //是字母返回true,否则返回false
 22 bool IsLetter(char ch){  
 23     if(((ch>=a)&&(ch<=z))||((ch>=A)&&(ch<=Z))){   
 24         return true;
 25     }else    return false;
 26 } 
 27 
 28 //进行统计各个单词出现的次数
 29 void analyse(ifstream &in)
 30 { 
 31     int i;
 32     bool flags;//标志,是否为新的单词
 33     string s="";//初始字符串s为空
 34     char ch;//字符
 35     string temp;//字符串
 36     
 37     while((in.get(ch)))//从文件内读取字符串
 38     {   
 39          if(IsLetter(ch)){   //单词的处理  
 40             s="";  
 41             while(IsLetter(ch))//如果当前字符是字母继续读取
 42             {  
 43                  s+=ch;    
 44                  in.get(ch);    
 45              } 
 46              in.seekg(-1,ios::cur);//文件指针(光标)后退一个字节   
 47              array_s.push_back(s);//读到的单词存到array_s数组中
 48              all_content.push_back(s);//读到的单词存到all_content数组中
 49 
 50              flags = true;
 51              for(i=0;i<num_word;i++)//对新单词进行处理
 52              {
 53                  if(s==WordNum[i].data)//单词已经存在,次数+1
 54                  {
 55                      WordNum[i].count++; //单词出现次数+1
 56                      flags = false;
 57                      break;
 58                  }
 59              }
 60              if(flags)//次单次目前还不存在
 61              {
 62                 WordNum[num_word].count = 1;//单词出现次数+1
 63                 WordNum[num_word].data = s;
 64                 num_word++;//单词数目+1
 65              }
 66         }else{//把其他字符加入all_content中(标点符号换行符一类的)
 67             temp = "";
 68             temp +=ch;
 69             all_content.push_back(temp);//读到的字符转化为字符串存到all_content数组中
 70         }
 71     }
 72 }
 73 
 74 //保存统计结果
 75 void Save()
 76 {
 77     int i;
 78     string file="";//存储原文件
 79     //把原文件存放到字符串中
 80     for(i=0;i<all_content.size();i++)
 81     {
 82         file += all_content[i];
 83     }
 84     printf("原文章内容为:\n");
 85     printf("%s\n\n",file.c_str());//输出
 86 
 87     ofstream out;
 88     out.open("D:/result.txt");//将某些关键词替换后的字符串存到文件中
 89 
 90     printf("------------统计结果---------\n");
 91     printf("单词\t出现次数\n");
 92     if(out.is_open())//打开文件
 93     {
 94         for(i=0;i<num_word;i++)
 95         {
 96             out<<WordNum[i].data;//单词存入文件
 97             out<<"\t";
 98             out<<WordNum[i].count;//单词出现次数存入文件
 99             out<<"\n";
100             printf("%s\t %d\n",WordNum[i].data.c_str(),WordNum[i].count);//输出
101         }
102         printf("-----以上为统计结果-------\n\n");
103     }else printf("文件操作出错!\n"); //文件带卡失败
104 }
105 
106 //替换某个单词
107 void Update()
108 {
109 //    string str,str2;//替换的单词
110     int i,select;
111     ofstream out;
112     
113     string filelast="";//存储更改后的文件
114 
115     char str[40];
116     char str2[40];
117     
118     printf("       ------------------------\n");
119     printf("      |-------文章替换---------|\n");
120     printf("      |------1:全部替换--------|\n");
121     printf("      |------0:逐个替换--------|\n");
122     printf("       ------------------------\n");
123     printf("选择替换方式:");
124     scanf("%d",&select);
125 
126 
127     if(select==1)//全部替换
128     {
129         printf("请输入你要替换的单词:");
130         scanf("%s",&str);
131         printf("你要替换成:");
132         scanf("%s",&str2);
133 
134         out.open("D:/resultupdate.txt");//将某些关键词替换后的字符串存到文件中
135 
136         if(out.is_open())
137         {
138             for(i=0;i<all_content.size();i++)//查找要替换的单词进行替换
139             {
140                 if(all_content[i]==str)//查到,替换
141                 {
142                     out<<str2;//保存到文件中
143                     all_content[i]=str2;
144                 }else{
145                     out<<all_content[i];//保存到文件中
146 
147                 }
148             }
149             printf("文章替换成功!\n\n");
150         }else printf("文件操作出错\n"); 
151     }else{//逐个替换
152         printf("请输入你要替换的单词:");
153         scanf("%s",&str);
154         //cin>>str;
155         out.open("D:/resultupdate.txt");//将某些关键词替换后的字符串存到文件中
156 
157         if(out.is_open())
158         {
159             for(i=0;i<all_content.size();i++)
160             {
161                 if(all_content[i]==str)//查到,替换
162                 {
163                     printf("位置为[%d]的%s",i,str);
164                     printf("你要替换成:");
165                     scanf("%s",&str2);
166                     //cin>>str2;
167                     out<<str2;//保存到文件中
168                     all_content[i]=str2;
169                 }else{
170                     out<<all_content[i];//保存到文件中
171                 }
172             }
173             printf("文章替换成功!\n\n");
174         }else printf("文件操作出错!\n"); 
175     }
176 
177     //string filelast="";
178 
179     //把原文件存放到字符串中
180     for(i=0;i<all_content.size();i++)
181     {
182         filelast += all_content[i];
183     }
184     printf("替换后文章内容为:\n");
185     printf("%s\n",filelast.c_str());//输出
186     //cout<<filelast<<endl;
187 }
188 int main() 
189 {  
190     ifstream in; 
191     ofstream out;
192     printf("输入文件路径:");
193     char a[30];
194     scanf("%s",&a);//输入文件路径
195     in.open(a,ios::in); //打开文件
196     if(in.is_open()){
197         analyse(in);   
198         in.close();
199         //system("pause");
200     }else printf("文件操作出错!\n"); 
201 
202     Save();
203     Update();
204     return 0;
205 }

 

英文文章

标签:

原文地址:http://www.cnblogs.com/minmsy/p/5079394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!