来自 2 个不同向量的输入,用逗号分隔

input from 2 different vectors seperated by a comma

本文关键字:分隔 输入 向量 来自      更新时间:2023-10-16

我正在做一个项目,要求我们以逗号分隔的对的形式获取输入,例如 2,16 16,134 15,631 这些对将被保存到 2 个向量中(1 个用于左边的数字,1 个用于每对右侧的数字)任何人都知道如何开始吗?

不要让这变得比必须的更难。您知道每对都将是XYZ,XYZ的形式,并且对之间会有空格。

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

事实上,成对阅读的整个循环必须是:

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

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

在这里看到它的实际效果:ideone

您可以在空格上拆分字符串,创建一个字符串数组。你会有类似{"2,16", "16,134", ...}.

然后,您可以在,上拆分这些字符串中的每一个。对于数组中的第一个字符串,它会给你{"2", "16"}.

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

这可能有助于拆分字符串,并将它们解析为整数。

你可以试试这样的东西

#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;
}