我的代码的示例输入是:
{ 1, 2, 3, 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)
一个简单的解决方法是使用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>{}};
答案 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>());