簡體   English   中英

為什么我的向量為空?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM