复杂的问题,可能是简单的答案。所以我需要制作的程序不能包含除String,iostream和vector之外的任何库。我需要创建一个具有3个功能的程序。一个创建整数向量,一个反转向量,一个打印向量。为了获取值,我需要使用getline来输入一个字符串,如果字符串状态退出,我们就会停止将新值放入其中。另外,我们需要测试它是否为整数(正数或负数)并将其添加到向量中。我的代码开始变得复杂,所以我真的需要一些帮助。以下是我到目前为止的情况。如果重要的话,我也使用Visual Studio。在此先感谢您的帮助!我的问题是当我运行程序时,它只会输出第一个数字。我不知道为什么,也想知道我做错了什么。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> CreateVector()
{
string tempvariable;
bool quit = false;
vector<int> userinput;
cout << "Please enter in an integer, type 'quit' to exit " << endl;
while (!quit)
{
getline(cin, tempvariable);
if (tempvariable == "quit")
quit = true;
else
{
bool isaninteger = true;
for(int i = 1; i <= tempvariable.size(); i++)
{
if (tempvariable[i] = "-" || isdigit(tempvariable[i]))
continue;
else
{
cout << "You entered in an incorrect option, please enter in a correct option" << endl;
cin.clear();
cin.ignore();
isaninteger = false;
break;
}
}
if (isaninteger)
userinput.push_back(stoi(tempvariable));
cout << "Please enter in an integer, type 'quit' to exit " << endl;
}
}
return userinput;
}
void printVector(vector<int> userinput)
{
int amountofspots = userinput.size();
cout << "Your Vector is ";
for (int i = 0; i < amountofspots; i++)
{
if (i = (amountofspots - 1))
cout << userinput.at(i) << endl;
else
cout << userinput.at(i) << " , ";
}
}
void reverseVector(vector<int>& userinput)
{
int amountofspots = userinput.size();
vector<int> tempvector;
for (int i = 0; i < amountofspots; i++)
tempvector.push_back(userinput.at(amountofspots - i));
for (int i = 0; i < amountofspots; i++)
userinput.pop_back();
for (int i = 0; i < amountofspots; i++)
userinput.push_back(tempvector.at(i));
}
int main()
{
vector<int> CreatedVector = CreateVector();
printVector(CreatedVector);
reverseVector(CreatedVector);
printVector(CreatedVector);
system("pause");
return 0;
}
答案 0 :(得分:2)
在if (i = (amountofspots - 1))
的循环中将if (i == (amountofspots - 1))
更改为printVector()
。
将tempvariable[i] = "-"
更改为tempvariable[i] == '-'
中的CreateVector()
。
=
是赋值运算符,==
是比较运算符。此外,单个字符用单引号括起来,而不是双引号。
答案 1 :(得分:0)
void reverseVector(vector<int>& userinput)
{
int amountofspots = userinput.size();
vector<int> tempvector;
for (int i = 0; i < amountofspots; i++)
tempvector.push_back(userinput.at(amountofspots - i));
应该是
void reverseVector(vector<int>& userinput)
{
int amountofspots = userinput.size();
vector<int> tempvector;
for (int i = 1; i < amountofspots+1; i++) // Index error
tempvector.push_back(userinput.at(amountofspots - i));
答案 2 :(得分:0)
以下内容:
for(int i = 1; i <= tempvariable.size(); i++) { if (tempvariable[i] = "-" || isdigit(tempvariable[i]))
必须成为:
for(int i = 0; i < tempvariable.size(); i++)
{
if (tempvariable[i] == '-' || isdigit(tempvariable[i]))
说明:
[i]
会返回一个char
。 "-"
不是单个char
,而是整个字符串文字。您无法直接将单个char
与整个字符串进行比较。但是,-
是一个char
,因此比较可行。=
不是比较,而是分配。 ==
用于比较。正如你的编译器应该警告你的那样!请注意,您的代码还存在其他问题:
if (i = (amountofspots - 1))
您再次混合作业和比较。制作==
。并注意编译器警告!
最后,isdigit
并不是一个很棒的功能。为了真正正确使用它,您首先必须将操作数强制转换为int
,同时确保它不是无效值,如文档here所述。
如果无法解析指定的字符串,为什么不捕获stoi
引发的异常?