如何在C ++中将定界符作为-0在数组大小和整数的数组值之间

问题描述

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

它输出向量中的每个元素,每个元素之间都有一个空格。它不会在第一个元素之前输出空格。