c++ - 使用 C++ 从文件中解析坐标

标签 c++ string parsing coordinates delimiter

我有一个关于将文件中的坐标解析到我的 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/

相关文章:

c++ - Boost::Asio 读/写操作

c# - Visual C# 逐字字符串语法问题

c++ - 使用rapidxml读取和打印。打印多个 sibling C++ 的问题

parsing - 具有存在量化的解析器的类型签名

c++ - C/C++ 中的地址偏移量是否在编译时解析?

C++排序数组是指向类的指针

c - 如何根据c中的位置打印字符串?

linux - 解析大括号中的 block

c++ - 检查是否在 std::ostream 中序列化了某些内容

string-ref 函数不能正常工作