如何在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。