主题:有一网友求解一到程序题,我做了回答,但仍有问题未解决,希望有能力的看一看,或者提出更好的代码,谢谢了
希望各位高人帮忙解决的问题是:
1.最后要求输出到另一个文件中,如何解决???
2.我这段代码是在Visual Studio 2008中编写的,可以运行,一点问题没有!!!但在VC6.0上就出现了问题......如果还有经历的话,请你们在VC6.0上运行一下,里面会有几个类似的错误,我大致的理解就是好像不支持我使用的“map关联容器”(C++ Primer这本书中学到的),我也在自己研究中,以下是那个网友的问题和我的解答!!!
网友的问题:用文件保存一段英文文本。
(1) 统计各字母在文本中出现的次数(忽略大小写)。
(2) 查找并替换文本中的某字符串,将替换后的文本存入另一个文件。
我得回帖:
由于我使用的开发环境是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; //对vector中的每个单词中字符出现次数的统计
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]; //将字符一个个压入map中
}
}
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;
}
1.最后要求输出到另一个文件中,如何解决???
2.我这段代码是在Visual Studio 2008中编写的,可以运行,一点问题没有!!!但在VC6.0上就出现了问题......如果还有经历的话,请你们在VC6.0上运行一下,里面会有几个类似的错误,我大致的理解就是好像不支持我使用的“map关联容器”(C++ Primer这本书中学到的),我也在自己研究中,以下是那个网友的问题和我的解答!!!
网友的问题:用文件保存一段英文文本。
(1) 统计各字母在文本中出现的次数(忽略大小写)。
(2) 查找并替换文本中的某字符串,将替换后的文本存入另一个文件。
我得回帖:
由于我使用的开发环境是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; //对vector中的每个单词中字符出现次数的统计
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]; //将字符一个个压入map中
}
}
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;
}