【问题标题】:How to split a string into integer array in c++?如何在c ++中将字符串拆分为整数数组?
【发布时间】:2019-06-21 07:36:22
【问题描述】:

我是 C++ 新手。我的目标是读取包含所有整数的文件,例如

1 2 3\n 1 3 4\n 1 2 4\n

1,2 3,4 5,6\n 1,3 3,4 3,5\n 1,3 3,4 4,2\n

我可以使用 getline 来读取它们,但是如何将它拆分为整数数组。喜欢array[3]={1,2,3}array2={1,2,3,4,5,6} 的第一行读取结果?对不起,我忘了提到我试图不使用 C++ 的 STL

【问题讨论】:

  • 你有什么尝试吗?
  • 这是一个巨大的学习曲线(当然不适合 C++ 初学者),但我为此使用 Boost Spirit。
  • 您应该补充说您正在“尝试”不使用 STL,否则您只会使用 STL 获得更多答案。这当然是最简单的方法。
  • 我已经更新了我的问题,抱歉这个不清楚的问题。
  • 你对 C++ 标准库有什么看法?尽管我的第一个评论(一旦你设置了语法,这将是一个单行),使用 std::vector 会给你一个很好的解决方案。为什么不把整个东西都用汇编写出来,让你的生活更加不愉快呢?

标签: c++


【解决方案1】:

不用提振精神也能做到

// for single line:
std::vector<int> readMagicInts(std::istream &input)
{
    std::vector<int> result;

    int x;
    while(true) {
       if (!(input >> x)) {
           char separator;
           input.clear(); // clear error flags;
           if (!(input >> separator >> x)) break;
           if (separator != ',') break;
       }
       result.push_back(x);
    }

    return result;
}

std::vector<std::vector<int>> readMagicLinesWithInts(std::istream &input)
{
    std::vector<std::vector<int>> result;

    std::string line;
    while (std::getline(input, line)) {
        std::istringstream lineData(line);
        result.push_back(readMagicInts(lineData));
    }
    return result;
}

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    相关资源
    最近更新 更多