我想创建一个简单的倒排索引。我在每个文档中都有一个带有docIds和关键字的文件。所以第一步是尝试读取文件并标记文本文件。我在网上发现了一个标记化函数,它应该可以工作并稍微改变它。我想在空白处标记每个单词。我的文本文件没有任何逗号或句点。标记文本文件后,令牌存储在向量中。所以在运行tokenize
函数后,我尝试打印出矢量的元素,但没有发生任何事情。然后我试着打印出矢量的大小,结果我得到0
。这里是我的代码:为什么我的矢量是空的?
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include "functions.h"
#include "vector"
using namespace std;
int main()
{
string line;
vector<string> v;
ifstream myfile("test.txt");
if(myfile.is_open()){
while(getline(myfile,line)){
//cout << line << '\n';
tokenize(line, ' ', v);
}
myfile.close();
}
else cout << "Unable to open file";
cout << v.size() << '\n';
return 0;
}
,这里是我的记号化功能:
using namespace std;
void tokenize(string s, char c, vector<string> v) {
string::size_type i = 0;
string::size_type j = s.find(c);
while (j != string::npos) {
v.push_back(s.substr(i, j-i));
i = ++j;
j = s.find(c, j);
if (j == string::npos)
v.push_back(s.substr(i, s.length()));
}
}
我不能使用strtok
,因为我会在以后的程序中使用线程和我在一个论坛上读到strtok
对线程无效。
不是应该'无效标记化(字符串s,炭C,矢量&v)'? –
vaultah
2015-02-05 18:22:51
你通过价值传递你的向量。 – drescherjm 2015-02-05 18:22:51
如果要查看调用函数中的结果,则需要通过引用传递向量。顺便说一句:使''#include'而不是'#include“vector”'。 –
2015-02-05 18:22:57