人傻时间多,我在一道简单的文件单词读取作业题上卡住!

又是一道作业题的分享~有关文件读取,大概意思:用命令行参数处理打开并读取文件,将其中的单词存储在vector / map / list中,并实现单词的排序。题目:

假设预先有编辑好的文本文件,其内容为若干英文单词。约定每个单词都由至少一个可打印字符构成,单词之间用空白字符分隔(空格、制表符’\t’、换行符等都是空白符号)。
请编写一个 C++程序,它满足以下要求:
(1)具体的文件路径(含文件名)不能写死在源代码中,即必须通过命令行参数形式传递给 main 函数。
(2)从文件中读取其中所有单词并放到内存中。要求文件操作必须使用 例程库的 ifstream 或 fstream 类型,每一个单词的文本必须使用例程库的 string 类型存储。
(3)请使用 C++标准库中的 map, 或 vector, 或 list等类型存储所有单词。需要你自学教材 3.7~3.8 给出的相关例子【学在西电/课程资料/教材相关/program-code-inTextbook/chapter2/有教材示例代码】。
(4)从文件中读到的所有单词,按照单词的字典顺序输出。对于重复出现的单词,可仅输出一遍,也可输出多遍(和输入中出现次数一致)。
(5)按单词进行数量统计,若N个单词有相同文本则该单词的出现次数为N。并输出单词总数量、每个不同单词的出现次数。
输入样例文件内容:
z1 z0 f
b ,3
a a
输出样例(对于上面的输入文件):
按字典顺序输出所有单词(每个重复单词仅输出一遍):
, a b f z0 z1
单词总数量:7
各单词出现次数(按单词的字典顺序排列):
, 1
a 2
b 1
f 1
z0 1
z1 1
以上是我们第二次上课的作业~

要求——通过命令行参数形式传递给 main 函数就是在自己的窗口里面执行——WIn +R打开命令行写入程序的可执行文件和
我的实现:#include <fstream> #include <sstream> #include <iostream> #include <stdlib.h> #include <string> #include <vector> using namespace std; int main(int argc,char *argv[]) { int k = 0; for (k = 0; k < argc; k++)cout << "argv[" << k << "] = " << argv[k] << endl; if (argc == 1) { cerr << "Usage: " << argv[0] << "filename[s]\n"; exit(EXIT_FAILURE); } ifstream fin; for (int file = 1; file < argc; file++) { fin.open(argv[file]); //建立输入的文件到fin的链接 if (!fin.is_open()) { cerr << "Could not open " << argv[file] << endl; fin.clear(); continue; } } string word; //用string类型暂时存储单词 vector<string> test(20); //创建一个vector类,准备将读取的单词存入数组中; char ch; int i = 0; cout << "file:\n"; //用string组装单词,并存入vector类中 while (fin.get(ch))//循环判断文件是否读到结尾; { if (ch == ' ' || ch == '\t' || ch == '\n')continue; //如果在循坏一开始就读到空白符号,跳过循环体读下一个字符; else //如果不是空白符号,将该字符加入字符串word中; { word = ch; } while (fin.get(ch))//读取文件中下一个字符,如果读取的字符是不空白字符,将它加入到string类型word中; { if (ch != ' ' && ch != '\t' && ch != '\n') { word = word + ch; } else if(ch == ' ' || ch == '\t' || ch == '\n') //如果读到空白字符,说明已读取到一个单词; { break; } } cout << "word:" << word << endl; test[i] = word; //将读取到的单词存到vector<string>类中 i++; //每写完一个单词i++; } fin.clear(); fin.close(); vector<string>::iterator st; int j = 0; while (j < i) { cout << "Vector[" << j << "]:\n"; cout << test[j] << endl; j++; } sort(test.begin(), test.end()); //vector类方法排序,这里不知道为什么排序不成功 cout << "sorted vector:\n"; j = 0; while (j < i) { cout << test[j] << ' '; j++; }//输出排序后的序列 return 0; }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值