这有什么问题。如果第一个元素包含任何零,则除第一个元素外,其他所有东西都在工作。例如输入-> 100输出-> 10输入-> 6030输出-> 630。题输入格式第一行也是唯一行由n个由逗号分隔的整数组成。
输出格式解析后打印整数。
#include <sstream>
#include <vector>
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
vector<int> parseInts(string str) {
// Complete this function
stringstream ss(str);
char ch;
vector<int> v;
int s;
int i = 0;
ss >> ch;
cout << ch;
while(ss >> i){
v.push_back(i);
ss >> ch;
}
return v;
}
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;
}
ss >> ch; cout << ch;
问题在于,您需要从输入流中提取1个字符,然后进入循环并读取其余字符。同样,您编写代码的方式是,数字只能由一位数字组成,因为您只能在char
中读取一位数字。
如果输入是一行中用逗号分隔的整数列表,则最好使用std::getline()
读取整行并解析该行。您可以将定界符指定为第三个参数,然后使用std::getline()
将读取的每个字符串转换为整数。这也将允许您读取包含多个数字的数字。
因此,请尝试如下更改parseInts():
std::stoi()
要注意的一件事是std::vector<int> parseInts(string str) {
// Complete this function
std::stringstream ss(str);
std::vector<int> v;
std::string number;
while (getline(ss, number, ','))
{
v.push_back(std::stoi(number));
}
return v;
}
与>>operator
的使用。前者将读取直到空格或换行符,而后者将读取整行。如果getline
不包含任何空格,则只能读取整行。
这怎么了
您以错误的方式从字符串流中读取。
要理解为什么6030输入会有630输出,请空运行代码。您正在从流中读取字符>>
,因此ch
被分配了值ch
。现在,您再次使用变量'6'
从while循环中的流中读取数据,但是i
是整数,因此i
被转换为"030"
,最后得到30(int)
作为输出。
请注意,对于678、5、10等情况,您将获得正确的输出,但并非对于所有测试用例。
这是一种正确的方法:
630
输出
#include <sstream>
#include <vector>
#include <iostream>
std::vector<int> parseInts(std::string str) {
std::stringstream whole_str(str);
std::string integer_str;
int integer;
std::vector<int> v;
while(whole_str >> integer_str){ // Read 1 integer(string) at a time
std::stringstream one_int(integer_str);
one_int >> integer; // Read and convert string to int
v.push_back(integer);
}
return v;
}
int main() {
std::string str{"100 200 5060 2040"};
std::vector<int> integers = parseInts(str);
for(int i = 0; i < integers.size(); i++) {
std::cout << integers[i] << "\n";
}
return 0;
}