回 帖 发 新 帖 刷新版面

主题:问题求解!!我是菜鸟...

用文件保存一段英文文本。 
    (1) 统计各字母在文本中出现的次数(忽略大小写)。 
    (2) 查找并替换文本中的某字符串,将替换后的文本存入另一个文件。

回复列表 (共8个回复)

沙发

我明天给你一份。。。。

板凳


谢谢....

3 楼


谢谢...

4 楼

谢谢

5 楼

由于我使用的开发环境是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 楼

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 楼

上面是完全正确的代码,希望对你还有用

8 楼

太感谢了...

我来回复

您尚未登录,请登录后再回复。点此登录或注册