使用向量c++

Working with vectors C++

本文关键字:c++ 向量      更新时间:2023-10-16

复杂的问题,可能简单的答案。因此,我需要制作的程序不能包含String、iostream和vector以外的任何库。我需要创建一个程序,有3个功能。一个创建一个整型向量,一个反转一个向量,还有一个输出一个向量。为了获取值,我需要使用getline来获取一个字符串,如果字符串状态退出,我们停止向其中放入新值。否则,我们需要测试它是否是整数(正数或负数),并将其添加到vector中。我的代码开始变得复杂了,所以我真的需要一些帮助。下面是我到目前为止所做的。我也在使用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;
}
  1. printVector()的环路中将if (i = (amountofspots - 1))改为if (i == (amountofspots - 1))

  2. CreateVector()中的tempvariable[i] = "-"改为tempvariable[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));

应该是

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

以下内容:

        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]))

解释:

  • 字符串索引从0开始到size() - 1结束。
  • [i]返回单个char"-"不是单个的char,而是一个完整的字符串字面值。您不能直接比较单个char与整个字符串。然而,-是单个char,因此比较将工作。
  • =不是比较,而是赋值。==用于比较。因为你的编译器应该警告你!

请注意,您的代码还有其他问题:

   if (i = (amountofspots - 1))

你又把赋值和比较混在一起了。设为==。还要注意编译器的警告!

最后,isdigit并不是一个很好的函数。为了真正正确地使用它,首先必须将操作数强制转换为int,同时确保它不是一个无效值,如这里所述。

如果指定的字符串不能被解析,为什么不直接捕获stoi抛出的异常呢?