【发布时间】:2020-05-01 11:25:13
【问题描述】:
我正在为'StringStream' problem from HackerRank 苦苦挣扎。准确地说,我得到了一串以逗号分隔的整数,例如“23,4,56”,我需要解析它们并返回一个整数向量。
我尝试了各种方法来解决这个问题,但它们对我不起作用。
这是原始代码。
#include <sstream>
#include <vector>
#include <iostream>
using namespace std;
vector <int> parseInts(string str)
{
// Function to complete.
}
int main()
{
string str;
cin >> str;
vector <int> integers = parseInts(str);
for (int i = 0; i < integers.size(); i++)
{
cout << integers[i] << "\n";
}
return 0;
}
这是我的第一个想法,用 StringStream 库转换。
vector <int> parseInts(string str)
{
stringstream ss(str);
int number;
// To help with conversion.
vector <int> temporary;
// Vector of results.
for (int i = 0; i < str.length(); i++)
{
ss >> number;
temporary.push_back(number);
}
return temporary;
}
这是我的第二个想法。
vector <int> parseInts(string str)
{
int number;
vector <int> temporary;
for (int i = 0; i < str.length(); i++)
{
number = (str[i]);
temporary.push_back(number);
}
return temporary;
}
这是最后一个想法,我想在 char* 上工作。
vector <int> parseInts(string str)
{
char* characters;
strcpy(characters, str.c_str());
int numbers;
vector <int> temp;
for (int i = 0; i < str.length(); i++)
{
numbers = stoi(characters);
temp.push_back(numbers);
}
return temp;
}
除了最后一个例子,他们返回了一些奇怪的数字。我该如何处理?
【问题讨论】:
-
“一些奇怪的数字”——这些数字是什么?它们有多奇怪?
-
我已经尝试了各种方法来解决这个问题 -- 最简单的方法是简单地用空格替换逗号并使用你的第一种方法。你试过吗?用空格替换逗号是一行 C++。
-
此外,您的第一种方法应该是使用
while (ss >> number)循环,而不是for循环。甚至不要考虑你的最后一种方法——它只是回到低级C编程,你应该使用 C++。
标签: c++ parsing stringstream