如果第一个元素包含任何零,则表明我的程序表现出不希望的状态

问题描述 投票:-1回答:2

这有什么问题。如果第一个元素包含任何零,则除第一个元素外,其他所有东西都在工作。例如输入-> 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;
}
c++ string vector stringstream
2个回答
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不包含任何空格,则只能读取整行。


0
投票

这怎么了

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

要理解为什么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;
}
© www.soinside.com 2019 - 2024. All rights reserved.