首页 > 技术文章 > 英文文章

minmsy 2015-12-27 00:51 原文

对任意一篇英文文章,统计其中每个单词分别出现了多少次,并可替换指定的单词。
【功能要求】
(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 }

 

  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(FILE *fp)
 30 { 
 31     int i;
 32     bool flags;//标志,是否为新的单词
 33     string s="";//初始字符串s为空
 34     char ch;//字符
 35     string temp;//字符串
 36     
 37     while((ch = fgetc(fp))!=EOF)//从文件内读取字符
 38     {     
 39     
 40          if(IsLetter(ch)){   //单词的处理  
 41             s="";  
 42             while(IsLetter(ch))//如果当前字符是字母继续读取
 43             {  
 44                  s+=ch;    
 45                  ch = fgetc(fp);   
 46              } 
 47             fseek(fp,-1L,1);
 48          //    in.seekg(-1,ios::cur);//文件指针(光标)后退一个字节   
 49              array_s.push_back(s);//读到的单词存到array_s数组中
 50              all_content.push_back(s);//读到的单词存到all_content数组中
 51 
 52              flags = true;
 53              for(i=0;i<num_word;i++)//对新单词进行处理
 54              {
 55                  if(s==WordNum[i].data)//单词已经存在,次数+1
 56                  {
 57                      WordNum[i].count++; //单词出现次数+1
 58                      flags = false;
 59                      break;
 60                  }
 61              }
 62              if(flags)//次单次目前还不存在
 63              {
 64                 WordNum[num_word].count = 1;//单词出现次数+1
 65                 WordNum[num_word].data = s;
 66                 num_word++;//单词数目+1
 67              }
 68         }else{//把其他字符加入all_content中(标点符号换行符一类的)
 69         
 70             temp = "";
 71      
 72             temp +=ch;
 73             all_content.push_back(temp);//读到的字符转化为字符串存到all_content数组中
 74             }
 75         }
 76   
 77     fclose(fp);
 78 }
 79 
 80 //保存统计结果
 81 void Save()
 82 {
 83     int i;
 84     string file="";//存储原文件
 85     //把原文件存放到字符串中
 86     for(i=0;i<all_content.size();i++)
 87     {
 88         file += all_content[i];
 89     }
 90     printf("原文章内容为:\n");
 91     printf("%s\n\n",file.c_str());//输出
 92 
 93     FILE *fp;
 94     if((fp=fopen("D:/result.txt","w+"))==NULL)
 95     {
 96         printf("文件不存在\n");
 97         
 98     }else{
 99         printf("------------统计结果---------\n");
100         printf("单词\t出现次数\n");
101    
102         for(i=0;i<num_word;i++)
103         {
104             fprintf(fp,"%s\t",WordNum[i].data.c_str());//单词存入文件
105             fprintf(fp,"%d\n",WordNum[i].count);////单词出现次数存入文件
106             printf("%s\t %d\n",WordNum[i].data.c_str(),WordNum[i].count);//输出
107         }
108         fclose(fp);
109         printf("-----以上为统计结果-------\n\n");
110     }
111 }
112 
113 //替换某个单词
114 void Update()
115 {
116 //    string str,str2;//替换的单词
117     int i,select;
118     ofstream out;
119     
120     string filelast="";//存储更改后的文件
121 
122     char str[40];
123     char str2[40];
124     
125     printf("       ------------------------\n");
126     printf("      |-------文章替换---------|\n");
127     printf("      |------1:全部替换--------|\n");
128     printf("      |------0:逐个替换--------|\n");
129     printf("       ------------------------\n");
130     printf("选择替换方式:");
131     scanf("%d",&select);
132 
133     FILE *fp;
134     if(select==1)//全部替换
135     {
136         printf("请输入你要替换的单词:");
137         scanf("%s",&str);
138         printf("你要替换成:");
139         scanf("%s",&str2);
140 
141         
142         if((fp=fopen("D:/resultupdate.txt","w+"))==NULL)//将某些关键词替换后的字符串存到文件中
143         {
144             printf("文件不存在\n");
145         
146         }else{
147             for(i=0;i<all_content.size();i++)//查找要替换的单词进行替换
148             {
149                 if(all_content[i]==str)//查到,替换
150                 {
151                     fprintf(fp,"%s",str2);//单词存入文件
152    
153                     all_content[i]=str2;
154                 }else{
155                     fprintf(fp,"%s",all_content[i].c_str());//单词存入文件
156                 }
157             }
158             fclose(fp);
159             printf("文章替换成功!\n\n");
160         }
161      
162      
163     }else{//逐个替换
164         printf("请输入你要替换的单词:");
165         scanf("%s",&str);
166         //cin>>str;
167         if((fp=fopen("D:/resultupdate.txt","w+"))==NULL)//将某些关键词替换后的字符串存到文件中
168         {
169             printf("文件不存在\n");
170         
171         }else{
172             for(i=0;i<all_content.size();i++)
173             {
174                 if(all_content[i]==str)//查到,替换
175                 {
176                     printf("位置为[%d]的%s",i,str);
177                     printf("你要替换成:");
178                     scanf("%s",&str2);
179                     //cin>>str2;
180                     fprintf(fp,"%s",str2);//单词存入文件
181                     all_content[i]=str2;
182                 }else{
183                     fprintf(fp,"%s",all_content[i].c_str());//单词存入文件
184                 }
185             }
186             fclose(fp);
187             printf("文章替换成功!\n\n");
188         }
189     }
190 
191     //string filelast="";
192 
193     //把原文件存放到字符串中
194     for(i=0;i<all_content.size();i++)
195     {
196         filelast += all_content[i];
197     }
198     printf("替换后文章内容为:\n");
199     printf("%s\n",filelast.c_str());//输出
200     //cout<<filelast<<endl;
201 }
202 int main() 
203 {  
204     ifstream in; 
205     ofstream out;
206     FILE *fp;
207     printf("输入文件路径:");
208     char file[30];
209     scanf("%s",&file);//输入文件路径
210     if((fp=fopen(file,"rt"))==NULL)
211     {
212         printf("文件操作出错!\n"); 
213 
214     }else{
215         analyse(fp);   
216     }
217     Save();
218     Update();
219     return 0;
220 }

 

推荐阅读