我正在一个项目上,要求我们以逗号分隔的成对形式获取输入,例如2,16 16,134 15,631 这些对将被保存到2个向量中(每个对中的左边数字为1,右边的数字为1),任何人都对如何开始该想法有任何了解?
答案 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", ...}
)中的每个字符串重复此操作
答案 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;
}