如何在C ++中将数组大小和整数数组值之间的分隔符设为-0
How to take delimiter as -0 between array size and array value of integer in c++
如何在c++中将数组大小和整数数组值之间的分隔符设为-0。
for example: 2 -0 1,2 -0
array-size '-0' 1st array values separated by "," '-0'
如果我使用 get line 在字符串中获取输入,那么如何从字符串中分离大小并获取数组的输入。
int main(){
string s,t;
getline(cin,s);
stringstream x(s);
while(getline(x,t,"-0")){
cout << t;
}
}
我无法正确理解 google 中的定界符概念,你能解释一下并以以下形式输入:“array-size '-0' 第一个数组值由 ',' '-0' 分隔”形式.
给定输入,最简单的方法是将字符串标记检查为 -0
分隔符。
#include <iostream>
#include <sstream>
#include <string>
using std::cin;
using std::cout;
using std::getline;
using std::string;
using std::stringstream;
int main(){
string s,t;
getline(cin, s);
stringstream x(s);
char const* sep = "";
while (x >> t) {
if (t == "-0") {
cout << sep << "<DELIMITER>";
} else {
cout << sep << t;
}
sep = " ";
}
cout << "\n";
}
这给出:
echo '2 -0 1,2 -0' | ./a.out
2 <DELIMITER> 1,2 <DELIMITER>
更新
将值存储到 std::vector<int>
。
#include <cstddef>
#include <iostream>
#include <sstream>
#include <stdexcept>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::getline;
using std::ostream;
using std::runtime_error;
using std::size_t;
using std::stoi;
using std::string;
using std::stringstream;
using std::vector;
static auto MakeVecInt(string line) -> vector<int> {
auto result = vector<int>();
auto ss = stringstream(line);
auto value = string{};
while(getline(ss, value, ',')) {
result.push_back(stoi(value));
}
return result;
}
static auto operator<<(ostream& out, vector<int> const& v) -> ostream& {
char const* sep = "";
for (auto i : v) {
out << sep << i;
sep = " ";
}
return out;
}
int main() {
auto line = string{};
getline(cin, line);
auto ss = stringstream(line);
auto count = size_t{};
auto delimiter1 = string{};
auto values = string{};
auto delimiter2 = string{};
if (!(ss >> count >> delimiter1 >> values >> delimiter2))
throw runtime_error("bad input");
if (delimiter1 != "-0" || delimiter2 != "-0")
throw runtime_error("bad input");
auto vec = MakeVecInt(values);
if (count != vec.size())
throw runtime_error("bad input");
cout << vec << "\n";
}
更新
注意上面代码中的vector<int>
输出例程:
static auto operator<<(ostream& out, vector<int> const& v) -> ostream&
它输出向量中的每个元素,每个元素之间有一个space。它不会在第一个元素之前输出 space。
如何在c++中将数组大小和整数数组值之间的分隔符设为-0。
for example: 2 -0 1,2 -0
array-size '-0' 1st array values separated by "," '-0'
如果我使用 get line 在字符串中获取输入,那么如何从字符串中分离大小并获取数组的输入。
int main(){
string s,t;
getline(cin,s);
stringstream x(s);
while(getline(x,t,"-0")){
cout << t;
}
}
我无法正确理解 google 中的定界符概念,你能解释一下并以以下形式输入:“array-size '-0' 第一个数组值由 ',' '-0' 分隔”形式.
给定输入,最简单的方法是将字符串标记检查为 -0
分隔符。
#include <iostream>
#include <sstream>
#include <string>
using std::cin;
using std::cout;
using std::getline;
using std::string;
using std::stringstream;
int main(){
string s,t;
getline(cin, s);
stringstream x(s);
char const* sep = "";
while (x >> t) {
if (t == "-0") {
cout << sep << "<DELIMITER>";
} else {
cout << sep << t;
}
sep = " ";
}
cout << "\n";
}
这给出:
echo '2 -0 1,2 -0' | ./a.out
2 <DELIMITER> 1,2 <DELIMITER>
更新
将值存储到 std::vector<int>
。
#include <cstddef>
#include <iostream>
#include <sstream>
#include <stdexcept>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::getline;
using std::ostream;
using std::runtime_error;
using std::size_t;
using std::stoi;
using std::string;
using std::stringstream;
using std::vector;
static auto MakeVecInt(string line) -> vector<int> {
auto result = vector<int>();
auto ss = stringstream(line);
auto value = string{};
while(getline(ss, value, ',')) {
result.push_back(stoi(value));
}
return result;
}
static auto operator<<(ostream& out, vector<int> const& v) -> ostream& {
char const* sep = "";
for (auto i : v) {
out << sep << i;
sep = " ";
}
return out;
}
int main() {
auto line = string{};
getline(cin, line);
auto ss = stringstream(line);
auto count = size_t{};
auto delimiter1 = string{};
auto values = string{};
auto delimiter2 = string{};
if (!(ss >> count >> delimiter1 >> values >> delimiter2))
throw runtime_error("bad input");
if (delimiter1 != "-0" || delimiter2 != "-0")
throw runtime_error("bad input");
auto vec = MakeVecInt(values);
if (count != vec.size())
throw runtime_error("bad input");
cout << vec << "\n";
}
更新
注意上面代码中的vector<int>
输出例程:
static auto operator<<(ostream& out, vector<int> const& v) -> ostream&
它输出向量中的每个元素,每个元素之间有一个space。它不会在第一个元素之前输出 space。