간단한 반전 된 색인을 만들고 싶습니다. 각 문서에있는 docId와 키워드가있는 파일이 있습니다. 첫 번째 단계는 파일을 읽고 텍스트 파일을 토큰 화하는 것입니다. 온라인으로 작동하는 tokenize 함수를 발견하고 조금 변경했습니다. 나는 공백 뒤에 각 단어를 토큰 화하고 싶다. 내 텍스트 파일에는 쉼표 나 마침표가 없습니다. 텍스트 파일을 토큰 화 한 후 토큰은 벡터에 저장됩니다. 그래서 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
은 스레드와 잘 작동하지 않습니다.
하면은'무효 토큰 화 (문자열의, 숯불 C, 벡터 없을 겁니다 & v)'? –
vaultah
값으로 벡터를 전달합니다. – drescherjm
호출 함수에서 결과를 확인하려면 벡터를 참조로 전달해야합니다. BTW :'#include "vector"대신 #include'을 만드십시오. –