从一个txt文件中读取文章并删除特定单词并显示文章

/*本程序练习从一个文本文件中逐单词读出字符串,并将它们保存在一个vector<string>中,最终删除其中的
and,the,a,if ,or,but等无意义的单词,最后显示出来。
*/
#include<string>
#include<iostream>
#include<vector>
#include <fstream>
#include<algorithm>
//本来有N多错误的,加上这个fstram的头文件就好了,fstream包含iostream.以后可以用#include <fstream>来代替#include<iostream>哈
using namespace std;

//本函数从文件中读出数据,并写入到string vector中,返回 string vector
vector<string>* readandstore()
{
 string file_name,text_words;
 int count_words=0;
 cout<<"请输入要读出的文件名"<<endl;
 cin>>file_name;
 ifstream infile(file_name.c_str ());
 
 
 if(!infile)
 {
  cerr<<"打开指定文件失败"<<endl;
  exit(-1);
 }
 vector<string>* myvector=new vector<string>;//动态建立一个string vector,避免空悬指针
 while(infile>>text_words)
 {
  myvector->push_back (text_words);
  count_words++;
 }
 cout<<"共有"<<count_words<<"个单词"<<endl;
 infile.close ();
 return myvector;
}
//本函数输出  string vector中的单词
void print(vector<string> *p)
{
 vector<string>::iterator begin_iter=p->begin ();
 for(;begin_iter!=p->end ();begin_iter++)
 {
  cout<<*begin_iter<<"/t";
 }

}

//本函数从string vector 中删除一些没有意义的单词
void deletewords(vector<string> *p)
{
 string sc[]={"and","the","a","if","or","but"};
 int numbers=0;
 vector<string>remove_words(sc,sc+6);
 for(vector<string>::iterator iter=remove_words.begin ();iter!=remove_words.end ();iter++)
 {
  numbers=count(p->begin (),p->end (),*iter);
  // 泛型算法count的使用,统计有多少个与*iter相等的单词
  vector<string>::iterator flag;
  flag=remove(p->begin (),p->end (),*iter);
  p->erase (flag,p->end ());
  cout<<"/n有"<<numbers<<"个"<<*iter<<"被删除:"<<endl;
 }

}

void main()
{
 vector<string> *p;
 p=readandstore();
 cout<<"删除以前文件内容为:"<<endl;
 print(p);
 deletewords(p);
 cout<<"删除以后文件内容为:"<<endl;
 print(p);
 cout<<endl;
 cout<<"删除后还有"<<p->size ()<<"个单词"<<endl;
}

/*总结:
(1)练习了对文件的输出用ifstream infile(文件名),在对文件读取的时候,string text_words;
     infile>>text_words,就可将读取的单词保存到text_words了。
(2)其次练习了使用泛型算法count,remove,erase等。
(3)练习了对容器vector的使用,和对迭代器iterator的使用.
(4)明白了输入文件名的时候,必须是全路径,如:d:/ttbc.txt
(5)在读取单词的时候,首先用的是getline(getline(infile,text_words,'/t'),后面发现getline
     是一次读取一行,不能对单个单词操作,即使我后面第三个参数用的是/t.
(6)让我注意到打开文件要用close来关闭。
(7)打开的文件仅局限与txt文件,打开doc和rm文件时打开失败。有空还要研究一下怎么打开其他文件。
*/

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值