【问题标题】:Pushing back a vector gives absurd results (C++)推回向量会产生荒谬的结果(C++)
【发布时间】:2021-08-03 07:27:06
【问题描述】:

您好,我看过其他一些关于它的帖子,但它们似乎从未解决我的问题,或者我只是用我的花生大小的大脑无法理解它。 如果我输入一些东西,然后把它推回向量,它总会有一些愚蠢荒谬的数字

对于那些想要上下文或如果它超出我认为的问题的人,这里是完整的代码:

#include <iostream>
#include <string>
#include <array>
#include <algorithm>
#include <vector>

using namespace std;

void stringToVec(string input, vector<int> output)
{
    int e = 0;
    string temp;

    //cout << "size: " << input.size() << '\n';

    for(int i = 0; i < input.size(); i++)
    {
        if(input[i] != ' ')
        {
            temp += input[i];
        }
        else if(input[i] == ' ')
        {
            int num = stoi(temp);

            output.push_back(num);
            temp = ""; // clear temp
        }
    }
}

int main()
{
    int a, b;
    string numsIn1, numsIn2;

    cin >> a;
    cin >> ws;
    getline(cin, numsIn1);

    numsIn1 += ' ';
    int nums1[a];
    // =======================
    cin >> b;
    cin >> ws;
    getline(cin, numsIn2);

    numsIn2 += ' ';
    int nums2[b];
    // =======================
    vector<int> output;

    stringToVec(numsIn1, output);
    stringToVec(numsIn2, output);

    int e = 0;

    for(int i = 0; i < a; i++)
    {
        output.push_back(nums1[i]);
    }
    for(int i = 0; i < b; i++)
    {
        output.push_back(nums2[i]);
    }

    sort(output.begin(), output.end());

    //int dyfslashj[3] = {3, 2, 1};

    for(int i = 0; i < a + b; i++)
    {
        cout << output[i] << ' ';
    }

    return 0;
}

这是最有可能出现问题的行。例如,如果我输入数字“3 4 2”,则向量将类似于“5234523452345 32452 34523”,或者一些荒谬的值

void stringToVec(string input, vector<int> output)
{
    int e = 0;
    string temp;

    //cout << "size: " << input.size() << '\n';

    for(int i = 0; i < input.size(); i++)
    {
        if(input[i] != ' ')
        {
            temp += input[i];
        }
        else if(input[i] == ' ')
        {
            int num = stoi(temp);

            output.push_back(num);
            temp = ""; // clear temp
        }
    }
}

【问题讨论】:

  • 您通过值而不是通过引用将向量传递给StringToVec,因此您在函数内部对向量执行的操作不会影响它。只是通过引用传递(&amp;
  • 与您的问题无关,但您也可以使用cin &gt;&gt; myIntVariable 直接从流中读取数字,您可以将其放入循环中以直接填充没有stoi 的向量。这也处理了中间的空格。
  • int nums1[a]; 不是标准 C++。对动态大小的数组使用std::vector。见Why aren't variable-length arrays part of the C++ standard?

标签: c++ c++11 vector push-back


【解决方案1】:

也许你的“cin”有问题。我可以看到你使用了 cin 和 getline。但是getline会在第一行读取。不管是“cin”。你可以尝试使用一些字符串作为函数的参数,看看它是否正确

【讨论】:

  • 你说的是 cin 和 getline 冲突吗?我已经对此进行了研究,并认为cin &gt;&gt; ws; 是一个解决方案,但是我就像我说的那样是一个豌豆大脑,所以如果我有任何错误,你可以纠正我。
猜你喜欢
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
相关资源
最近更新 更多