c++的一个程序问题

lty369963 2012-10-13 04:59:30
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<fstream>
using namespace std;

//用于将单词按长度排序的比较函数
bool isshorter(const string &s1,const string &s2)
{
return s1.size()<s2.size();

}
//确定给定单词的长度是否小于4
bool GT4(const string&s)
{
return s.size()>=4;
}
//如果ctr不为1,返回word的复制版本
string make_plural(size_t ctr,const string &word,const string &ending)
{
return (ctr==1)?word:word+ending;
}
//main 函数接受文件名为参数
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> words;
string word;
while(infile>>word)
words.push_back(word);
//对输入排序,以便去除重复单词
sort(words.begin(),words.end());
//使用算法unique对元素重新排序并返回一个迭代器
//表示无重复的单词范围的结束
//erase操作使用该迭代器删除输入序列中的单词
words.erase(unique(words.begin(),words.end()),words.end());
//将单词按长度顺序,等长的单词按字典顺序排列
stable_sort(words.begin(),words.end(),isshorter);
//计算并输出长度不小于4的单词数目
vector<string>::size_type wc=count_if(words.begin(),words.end(),GT4);
cout<<wc<<" "
<<make_plural(wc,"word","s")
<<"4 characters or longer"<<endl;
//输出输入序列中不重复的单词
cout<<"unique words: "<<endl;
for(vector<string>::iterator iter=words.begin();iter!=words.end();++iter)
cout<<*iter<<" "<<endl;
return 0;


}
这个程序是统计长度不小于4的单词,并输入序列中不重复的单词,在程序源文件上运行和测试自己的程序
请问,具体是如何输入运行的?步骤是怎样?请教大神!
...全文
125 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lty369963 2012-10-13
  • 打赏
  • 举报
回复
嗯,我是初学者,不知道怎么在控制台下运行程序,
请大侠再指教一下,怎么运行,谢谢!
zoelva 2012-10-13
  • 打赏
  • 举报
回复
zoelva 2012-10-13
  • 打赏
  • 举报
回复

#include<algorithm>
#include<fstream>
#include<iostream>
#include<string>
#include<vector>

using namespace std;

inline bool isshorter(const string &s1, const string &s2) {
return s1.size() < s2.size();
} //用于将单词按长度排序的比较函数

inline bool GT4(const string&s) {
return s.size()>=4;
} //确定给定单词的长度是否小于4

inline string make_plural(size_t ctr, const string &word, const string &ending) {
return ctr == 1 ? word : word + ending;
} //如果ctr不为1,返回word的复数版本

//main 函数接受文件名为参数
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> words;
string word;
while(infile >> word) {
words.push_back(word);
}
sort(words.begin(),words.end()); //对输入排序,以便去除重复单词
words.erase(unique(words.begin(), words.end()), words.end()); //使用算法unique对元素重新排序并返回一个迭代器,表示无重复的单词范围的结束
//erase操作使用该迭代器删除输入序列中的单词
stable_sort(words.begin(), words.end(), isshorter); //将单词按长度顺序,等长的单词按字典顺序排列
vector<string>::size_type wc = count_if(words.begin(), words.end(), GT4); //计算并输出长度不小于4的单词数目
cout << wc << " " << make_plural(wc, "word", "s")
<< "4 characters or longer" << endl;
cout << "unique words: " << endl; //输出输入序列中不重复的单词
for(vector<string>::iterator iter = words.begin(); iter != words.end(); ++iter) {
cout << *iter << " " << endl;
}
return 0;
}

在控制台中运行程序,执行格式是 程序名 + 输入文件名,假如生成的程序的 文件名是 hello.exe, 则在控制台中进入到hello.exe的当前目录中(假设输入文件名为 data.txt,与hello.exe处于同一目录中,执行 hello data.txt,回车运行即可

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧