主题:问题求解!!我是菜鸟...
1335711071
[专家分:0] 发布于 2011-02-24 18:41:00
用文件保存一段英文文本。
(1) 统计各字母在文本中出现的次数(忽略大小写)。
(2) 查找并替换文本中的某字符串,将替换后的文本存入另一个文件。
回复列表 (共8个回复)
沙发
Sky_YiBai [专家分:140] 发布于 2011-02-25 18:29:00
我明天给你一份。。。。
板凳
1335711071 [专家分:0] 发布于 2011-02-25 19:14:00
谢谢....
3 楼
1335711071 [专家分:0] 发布于 2011-02-25 19:16:00
谢谢...
5 楼
Sky_YiBai [专家分:140] 发布于 2011-02-25 22:56:00
由于我使用的开发环境是Visual Studio 2008 ,我在这上面运行调试没问题,但放在vc6.0里面时会显示有些C++库函数vc6.0不认,原因我也在查找中,但保证所用函数均是C++中的类和函数,同时还有程序的正确性!!!(实在不行,你留个qq给我,我把exe执行文件直接给你!!!)
首先,我现在桌面建立了一个文本文件(txt格式),里面我输入了如下的内容:
the quick Red fox jumps over the slow red turtle 注意:在这里面我为了测试,特意在里面设置了red这个单词重复了,并且将其中一个red的“r”改写成了大写字母,以此来测试这个代妈是否能做到“不区分大小写”的功能!
其次,我用Visual Studio 2008 编译了下边的代码,将生成一个exe文件,然后右键点击刚才建立的文本文件,利用打开方式选择我们生成的执行文件来运行这个文本文件,即可完成文件的输入,并测试结果(见dos界里的提示语)
未解决问题:由于时间仓促和能力有限,对于最后要求输出到另一个文件中,我每台搞明白呢,我会尽快给你答复的
源代码:
// 123.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstdlib> //用于暂停
#include <cctype>
#include <vector>
//#include <cstring> //用于处理C风格字符串
//#include <bitset>
//#include <stack>
#include <map>
#include<fstream>
//#include<algorithm>
//#define NDEBUG
using namespace std;
int main(int argc,char **argv)
{
if(argc<2)
{
cerr<<"No input file!"<<endl;
return EXIT_FAILURE;
}
//打开输入文件
ifstream inFile;
inFile.open(argv[1]);
if(!inFile)
{
cerr<<"Can not open input file!"<<endl;
return EXIT_FAILURE;
}
vector<string> Vec;
string word;
map<char,int> CharCount;
char ch;
string FindWord;
string ReplaceWord;
int Control=1;
while(inFile>>word)
{
Vec.push_back(word);
}
cout<<"该文件中的内容是:"<<endl;
for(vector<string>::iterator iter=Vec.begin();iter!=Vec.end();++iter)
{
cout<<(*iter)<<" ";
for(int i=0;i!=(*iter).size();++i)
{
ch=(*iter)[i];
ch=tolower(ch); //不区分大小写
++CharCount[ch];
}
}
cout<<" "<<endl;
cout<<" "<<endl;
cout<<"文件中每个字符的出现次数统计结果是:"<<endl;
cout<<"Char\t\t"<<"Times"<<endl;
for(map<char,int>::iterator iter=CharCount.begin();iter!=CharCount.end();++iter)
{
cout<<(*iter).first<<"\t\t"<<(*iter).second<<endl;
}
system("pause"); //程序在此处停住,以便检查运行结果!
system("cls"); //清屏
cout<<"请输入你想查找的单词:"<<endl;
cin>>FindWord;
cout<<"请输入你用来替换的单词:"<<endl;
cin>>ReplaceWord;
for(int i=0;i!=FindWord.size();++i)
{
ch=FindWord[i];
FindWord[i]=tolower(ch); //不区分大小写
}
for(vector<string>::iterator iter=Vec.begin();iter!=Vec.end();++iter)
{
for(int i=0;i!=(*iter).size();++i)
{
ch=(*iter)[i];
(*iter)[i]=tolower(ch); //不区分大小写
}
if((*iter)==FindWord)
{
(*iter)=ReplaceWord;
Control=0;
}
}
if(Control==1)
{
cout<<"你要查找的单词在文件中不存在!!!"<<endl;
}
else
{
cout<<"文件中部分单词被替后的结果是:"<<endl;
for(vector<string>::iterator iter=Vec.begin();iter!=Vec.end();++iter)
{
cout<<*iter<<" ";
}
}
system("pause"); //程序在此处停住,以便检查运行结果!
return 0;
}
6 楼
Sky_YiBai [专家分:140] 发布于 2011-03-02 10:25:00
1.问题来源:在“编程爱好者论坛”中,一网友提出了这样的问题,我寄予了解答~~
2.问题:用文件保存一段英文文本。
(1) 统计各字母在文本中出现的次数(忽略大小写)。
(2) 查找并替换文本中的某字符串,将替换后的文本存入另一个文件。
3. 测试文件内容:(利用Red和red做测试)
the quick Red fox jumps over the slow red turtle
4.程序设计中遇到的问题:(解决原理见第五点)
在程序设计中,我主要遇到的问题存在于文件的输入和输出。
5.问题的解决原理:
对于程序最后将结果输出到另外的文件中,我通过在在网上查找相关的内容,得到了启发。
网上的C语言版的向文件中写结果:
CString savefile;
savefile = "output.txt";
ofstream file;
file.open(savefile, ios::app|ios::in, 0);
file<<""<<endl;
file.close();
以此类推,我导出了在C++中关于向文件中输出结果的方法:
ofstream outFile;
outFile.open(s2.c_str,ofstream::out|ofstream::trunc);
outFile<<(*iter)<<” ”;
outFile.close();
6.源代码:
// 123.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstdlib> //用于暂停
#include <cctype>
#include <vector>
//#include <cstring> //用于处理C风格字符串
//#include <bitset>
//#include <stack>
#include <map>
#include<fstream>
//#include<algorithm>
//#define NDEBUG
using namespace std;
int main(int argc,char **argv)
{
/*
if(argc<2)
{
cerr<<"No input file!"<<endl;
return EXIT_FAILURE;
}
*/
//打开输入文件
string s1="D:\\234.txt";
string s2="D:\\456.txt";
ifstream inFile(s1.c_str(),ifstream::in);
ofstream outFile;
outFile.open(s2.c_str(),ofstream::out|ofstream::trunc);
if(!inFile)
{
cerr<<"Can not open input file!"<<endl;
//cout<<"Can not open input file!"<<endl;
return EXIT_FAILURE;
}
vector<string> Vec;
string word;
map<char,int> CharCount;
char ch;
string FindWord;
string ReplaceWord;
int Control=1;
while(inFile>>word)
{
Vec.push_back(word);
}
cout<<"该文件中的内容是:"<<endl;
for(vector<string>::iterator iter=Vec.begin();iter!=Vec.end();++iter)
{
cout<<(*iter)<<" ";
for(int i=0;i!=(*iter).size();++i)
{
ch=(*iter)[i];
ch=tolower(ch); //不区分大小写
++CharCount[ch];
}
}
cout<<" "<<endl;
cout<<"文件中每个字符的出现次数统计结果是:"<<endl;
cout<<"Char\t\t"<<"Times"<<endl;
for(map<char,int>::iterator iter=CharCount.begin();iter!=CharCount.end();++iter)
{
cout<<(*iter).first<<"\t\t"<<(*iter).second<<endl;
}
system("pause"); //程序在此处停住,以便检查运行结果!
system("cls"); //清屏
cout<<"请输入你想查找的单词:"<<endl;
cin>>FindWord;
cout<<"请输入你用来替换的单词:"<<endl;
cin>>ReplaceWord;
for(int i=0;i!=FindWord.size();++i)
{
ch=FindWord[i];
FindWord[i]=tolower(ch); //不区分大小写
}
for(vector<string>::iterator iter=Vec.begin();iter!=Vec.end();++iter)
{
for(int i=0;i!=(*iter).size();++i)
{
ch=(*iter)[i];
(*iter)[i]=tolower(ch); //不区分大小写
}
if((*iter)==FindWord)
{
(*iter)=ReplaceWord;
Control=0;
}
}
if(Control==1)
{
cout<<"你要查找的单词在文件中不存在!!!"<<endl;
}
else
{
cout<<"文件中部分单词被替后的结果已经显示在存储路径为:"<<s2<<" 这个文件中"<<endl;
inFile.close();
for(vector<string>::iterator iter=Vec.begin();iter!=Vec.end();++iter)
{
outFile<<*iter<<" ";
}
outFile.close();
}
system("pause"); //程序在此处停住,以便检查运行结果!
return 0;
}
7 楼
Sky_YiBai [专家分:140] 发布于 2011-03-02 10:26:00
上面是完全正确的代码,希望对你还有用
8 楼
1335711071 [专家分:0] 发布于 2011-03-07 20:15:00
太感谢了...
我来回复