我有一个关于将文件中的坐标解析到我的 C++ 程序中的问题。
"file.txt"
文件的内容由一行组成:"1,2"
1
需要是 X 坐标。 ','
是分隔符。 2
是 Y 坐标。
我的程序的输出是:"1"
。
看起来我的程序只是将字符串放在 vector 中的分隔符前面,然后认为它是文件的结尾。
我该如何解决这个问题?
你可以在这里找到我的代码。提前致谢!
#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <sstream>
char data[220];
void parseString(std::string string);
int main(int argc, char **argv) {
std::ifstream indata("file.txt");
std::vector <std::string> buffer(5);
int i = 0;
while(indata.good())
{
indata.getline(data, 220);
parseString(data);
++i;
}
return 0;
}
void parseString(std::string string){
std::string delimiter = ",";
size_t pos = 0;
std::string token;
std::vector<std::string> tempVector(2);
int i = 0;
while ((pos = string.find(delimiter)) != std::string::npos) {
token = string.substr(0, pos);
tempVector[i] = token;
string.erase(0, pos + delimiter.length());
}
for(std::string S : tempVector){
std::cout << S << std::endl;
}
}
最佳答案
问题出处:
while ((pos = string.find(delimiter)) != std::string::npos) {
token = string.substr(0, pos);
tempVector[i] = token;
string.erase(0, pos + delimiter.length());
}
在第一个循环解析之后(在 while
中),您删除第一部分,即 "1,"
,只剩下 "2"
。然后您将在此处停止,因为其中不再有分隔符。这就是为什么你只有 1
。
您可以简单地将字符串数据
放入std::istringstream
中, 然后你可以使用 >>>
轻松解析数据:
std::istringstream iss(data); // e.g. data = "1,2"
int first_int, second_int;
char delimiter;
iss >> first_int >> delimiter >> second_int;
| | |
1 ',' 2
关于c++ - 使用 C++ 从文件中解析坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439380/