从标准输入读取数组,忽略括号和逗号

时间:2014-11-03 23:16:53

标签: c++ cin

我的代码的示例输入是:

{ 1, 2, 3, 4 }

我希望忽略大括号和逗号,并将数字读入数组。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

嗯,这可能有用:

// Ignore all characters up to and including the open curly bracket
cin.ignore(100000, '{');

// Read the numbers into an array
int my_array[4];
unsigned int array_index = 0;
cin >> my_array[array_index];
array_index++;
cin >> my_array[array_index];
array_index++;
cin >> my_array[array_index];
array_index++;
cin >> my_array[array_index];

// Ignore all characters up to and including the newline.
cin.ignore(1000000, '\n');

您可以使用for循环读取数字。

答案 1 :(得分:2)

使用Regex

一个简单的解决方法是使用C ++ 11 正则表达式简单地用空格替换所有不需要的字符,然后像往常一样使用流来标记整数。

假设您已将输入读入名为s的字符串,例如

std::getline(std::cin, s);

然后您可以使用以下两行简单地将所有整数读入std::vector

std::istringstream ss{std::regex_replace(s, std::regex{R"(\{|\}|,)"}, " ")};
std::vector<int> v{std::istream_iterator<int>{ss}, std::istream_iterator<int>{}};

Live Example

答案 2 :(得分:1)

这是一种方法:

#include <algorithm>
#include <cctype>
#include <iostream>
#include <iterator>
#include <string>

using namespace std;

int main() {
    vector<int> nums;
    for_each(istream_iterator<string>{cin}, istream_iterator<string>{}, [&](string s) {
        s.erase(remove_if(begin(s), end(s), [](char c) { return !isdigit(c); }), end(s));
        if (!s.empty())
            nums.push_back(stoi(s));
    });
    copy(begin(nums), end(nums), ostream_iterator<int>{cout, ", "});
    cout << endl;
}

答案 3 :(得分:0)

  

从标准输入读取数组,忽略括号和逗号到矢量中。

#include <algorithm>    // std::replace_if()
#include <iterator>     // std::istream_iterator<>()
#include <sstream>      // std::stringstream
#include <vector>       // std::vector

std::getline(std::cin, line); // { 1, 2, 3, 4 }

std::replace_if(line.begin(), line.end(),
                [](const char& c) { return ((c == '{') || (c == ',') || (c == '}')); },
                ' ');

std::stringstream ss(line); // 1 2 3 4

std::vector<int> v((std::istream_iterator<int>(ss)),
                    std::istream_iterator<int>());