[英]Why is my vector empty?
我想創建一個簡單的倒排索引。 我在每個文檔中都有一個帶有docId和關鍵字的文件。 因此,第一步是嘗試讀取文件並標記文本文件。 我在網上找到了應該工作的令牌化功能,並對其做了一些修改。 我想在每個空格后標記每個單詞。 我的文本文件沒有任何逗號或句點。 在標記文本文件后,標記將存儲在向量中。 所以在運行了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
不能很好地與線程配合使用的論壇。
為什么我的向量為空?
因為您要按值傳遞vector
:
void tokenize(string s, char c, vector<string> v) {
將其更改為參考:
void tokenize(string s, char c, vector<string>& v) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.