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