#include <string>
#include <iostream>
#include <vector>
#include <sstream>
#include <fstream>
using namespace std;
vector <string> tokenizeString(string filename, string delimiter);
int main() {
vector<string> tokens = tokenizeString("cityLocation.txt", "-");
for (int i = 0; i < tokens.size(); i++) {
cout << tokens[i];
}
return 0;
}
vector <string> tokenizeString (string filename, string delimiter) {
size_t pos = 0;
vector<string>tokens;
string token;
ifstream cityText(filename);
string line;
while (getline(cityText, line)) {
while ((pos = line.find(delimiter)) != string::npos) {
token = line.substr(0,pos);
tokens.push_back (token);
line.erase(0, pos + delimiter.length());
}
}
return (tokens);
}
这是我的代码,我的文本文件数据是
[1,1]-3-Big_City [1,2]-3-Big_City [1,3]-3-Big_City [2,1]-3-Big_City [2,2]-3-Big_City [2,3]-3-Big_City [2,7]-2-Mid_City [2,8]-2-Mid_City [3,1]-3-Big_City
我的代码正在跳过所有的大城市和中城市。 它仅打印出第一列和第二列数据。
我的分隔符应该是'-'。
我还没有尝试过将数据保存到向量中,但是想要一些关于如何做到这一点的建议
答案 0 :(得分:2)
这是因为您需要在最后一个定界符之后的之后再次运行。您可以使用后测试循环来完成此操作,该循环将在pos == string :: npos时再执行一次,因此添加line.substr(pos,string::npos);
作为令牌,该令牌被定义为从位置pos到结尾的子字符串。字符串。
vector <string> tokenizeString (string filename, string delimiter) {
vector<string>tokens;
string token;
ifstream cityText(filename);
string line;
while (cityText >> line) {
size_t pos = 0, lastpos=0;
do {
pos = line.find(delimiter, lastpos);
token = line.substr(lastpos,pos-lastpos);
tokens.push_back (token);
lastpos=pos+1;
} while (pos != string::npos);
}
return (tokens);
}