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