首页 > 解决方案 > 从输入文件 C++ 中读取,用逗号分隔

问题描述

我是 C++ 的初学者。我有一个以下格式的输入文件(它以一个新的空行开头,然后是一堆字符串(例如 117b、44b、...、197f、f),用逗号分隔,这些字符串可能跨越一行,如下所示然后是 2 个线程数(例如 10、15),然后是一些函数调用):

"

117b,44b,19r,9b,6r,f,f,f,41b,21r,f,f,f,89r,72b,f,75r,f,f,96b,92r,f,f,101r,f, f,146b,133b,126r,f,f,145r,f,f,186b,185r,f,f,197f,f

搜索主题:10

修改线程数:15

插入(150) || 插入(25) || 插入(163) || 删除(25) || 删除(6) || 搜索(101) || 搜索(163) || 搜索(6)

"

我想读取文件并将从 117b 到 f 的字符串存储在字符串数组(或向量)中,以便数组看起来像这样 = ["117b","44b","19r",...,"197f “,“F”]。然后我想将搜索线程的数量存储在一个 int 变量中,并将修改线程的数量存储在另一个 int 变量中。我尝试使用 get line 函数从文件中读取并用逗号分割,然后是数组中的最后一个元素不会只是“f”,因为它会继续阅读,因为最后一个“f”的末尾没有逗号。任何想法如何做到这一点?

标签: c++

解决方案


一旦没有更多逗号分隔的标记要读取,您可以使用调用getline()和 a来停止。std::stringstream

#include <iostream>
#include <sstream>
#include <string>
#include <vector>

int main() {
    std::string str = "117b,44b,19r,9b,6r,f,f,f,41b,21r,f,f,f,89r,72b,f,75r,f,f,96b,92r,f,f,101r,f,f,146b,133b,126r,f,f,145r,f,f,186b,185r,f,f,197f,f";
    std::vector<std::string> tokens;

    std::stringstream ss(str);
    std::string token; 
    while (getline(ss, token, ',')) //delimit on comma
        tokens.push_back(token);

    for (std::size_t i = 0; i < vect.size(); i++)
        std::cout << vect[i] << std::endl;
}

推荐阅读