如果第一个元素包含任何零,则我的程序以不希望的方式运行

If the first element contains any zero, than my program is behaving in an undesired way

本文关键字:希望 运行 方式 程序 我的 元素 第一个 包含任 何零 如果      更新时间:2023-10-16

这有什么问题。如果第一个元素包含任何零,则除第一个元素外,一切都在工作。例如,输入 -> 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 个字符,然后再进入循环并读取其余字符。此外,您编写代码的方式是数字仅由一位数字组成,因为您只能将 1 位数字读入char

如果输入是单行上以逗号分隔的整数列表,则最好使用std::getline()读取整行并解析该行。您可以将分隔符指定为第三个参数,并使用 std::stoi(( 将读取的每个字符串转换为整数。这也将允许您读取包含多个数字的数字。

因此,请尝试更改parseInts((,如下所示:

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

需要注意的一件事是使用>>operatorvsgetline.前者将读取直到空格或换行符,而后者将读取整行。只有当>>不包含任何空格时,您才能使用 阅读整行。

有什么问题

您以错误的方式从字符串流中读取。

要了解为什么 6030 输入有 630 输出,请试运行代码。您正在从流中读取字符ch,因此ch被分配了值'6'。现在,您再次使用变量i从 while 循环中的流中读取,但i是一个整数,因此"030"转换为30(int),最终630作为输出。

请注意,对于 678、5、10 等情况,您将获得正确的输出,但并非所有测试用例。

这是一种正确的方法:

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

输出

100
200
5060
2040