【发布时间】: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,因此您在函数内部对向量执行的操作不会影响它。只是通过引用传递(&) -
与您的问题无关,但您也可以使用
cin >> 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