输入两个逗号分隔的不同向量

时间:2019-07-08 19:53:33

标签: c++ visual-studio

我正在一个项目上,要求我们以逗号分隔的成对形式获取输入,例如2,16 16,134 15,631 这些对将被保存到2个向量中(每个对中的左边数字为1,右边的数字为1),任何人都对如何开始该想法有任何了解?

3 个答案:

答案 0 :(得分:1)

不要为此变得更难。您知道每对将采用XYZ,XYZ的形式,并且两对之间会有空白。

流提取运算符(>>)读入int变量时,将读取它可以读取的所有整数字符(忽略前导空格),直到遇到非整数字符为止。我们可以使用它来大大简化事情。

实际上,成对读取的整个循环必须是:

int p1, p2;
char comma;
while(std::cin >> p1 >> comma >> p2) {
    //...
}

(请注意,我在这里使用std::cin。可以很容易地将其换成文件流,或者-如果您有直串,则可以换成字符串流)。

在此处查看实际操作:ideone

答案 1 :(得分:0)

您可以在空格上分割字符串,创建一个字符串数组。您将看到类似{"2,16", "16,134", ...}的内容。

然后,您可以在,上拆分所有这些字符串。对于数组中的第一个字符串,它将为您提供{"2", "16"}

将第一个字符串解析为整数,并将其添加到第一个向量中,解析第二个字符串并将其添加到第二个向量中。对初始数组({"2,16", "16,134", ...})中的每个字符串重复此操作

This可能有助于拆分字符串,this有助于将其解析为整数。

答案 2 :(得分:0)

您可以尝试这样的事情

#include <iostream>
#include <vector>
#include <sstream>

std::pair<std::vector<int>, std::vector<int>> ExtractPairsFromString(const std::string& p_string)
{
    std::pair<std::vector<int>, std::vector<int>> result;

    std::stringstream   linestream(p_string);
    std::string         pair;

    while (getline(linestream, pair, ' '))
    {
        std::istringstream iss(pair);

        size_t delimiterPos = pair.find(',');

        std::string left = std::string(pair.begin(), pair.begin() + delimiterPos);
        std::string right = std::string(pair.begin() + delimiterPos + 1, pair.end());

        result.first.push_back(std::atoi(left.c_str()));
        result.second.push_back(std::atoi(right.c_str()));
    }

    return result;
}

int main()
{
    std::pair<std::vector<int>, std::vector<int>> result = ExtractPairsFromString("2,16 16,134 15,631");

    std::cout << "First vector (Left items):" << std::endl;
    for (const auto& element : result.first)
    {
        std::cout << element << std::endl;
    }

    std::cout << "Second vector (Right items):" << std::endl;
    for (const auto& element : result.second)
    {
        std::cout << element << std::endl;
    }

    std::cin.get();
    return 0;
}