最近又萌生了背单词的想法。在网上找到了一个词频表,里面包含使用频率最高的两万个单词,是 pdf 格式的,由于要把单词导入到手机软件中,我首先将它转化成了 txt 格式。转换后得到的文本格式很乱,有很多地方的顺序乱了,但是都是一个数字(单词使用频率的排名)后面紧接着一个单词,于是我考虑用程序把格式整理一下。目标效果是,每一行两个字符串,第一个字符串是排名,第二个字符串是相对应的单词,单词按照使用频率由高到低排序。
脚本语言处理文本似乎更方便一些,我只会一点 Python,而且并不是很熟悉。我对 C 和 C++ 更了解一些,前不久刚看完 C++ Primer,觉得使用 C++ 标准库也可以很方便快捷地达到目的。最后设计了如下的方案:
fstream
读取文本,可以实现忽略非打印字符,从文本中一次读取一个字符串pair<int, string>
类型存储每一个“排名-单词”对,首先要使用 stoi
函数将 string
类型的排名转化成 int
类型pair
对象,将其存入 vector
中,最后使用 sort
对 vector
进行排序,排序的依据是单词的排名,即 pair<int, string>
中的那个 int
值的大小vector
格式化输出,得到最终的结果最终的代码如下:
#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <utility>
#include <iomanip>
using namespace std;
int main()
{
int count = 0;
int key;
string str;
vector< pair<int, string> > words;
ifstream fin("wordfreq-20000.txt");
// Read a word each time
while (fin >> str) {
++count;
if (count % 2 == 1)
key = stoi(str);
else {
pair<int, string> tmp{key, str};
words.push_back(tmp);
}
}
sort(words.begin(), words.end());
for (const auto &w : words)
cout << setw(5) << w.first << " " << w.second << endl;
return 0;
}
这么说来,码农真是一个还不错的职业:)
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/kristpan/article/details/46706661