C ++数组(无限输入)

时间:2015-10-16 04:01:35

标签: c++

我想做的是允许用户输入任意数量的变量(例如:1 6 945 fhds),我的程序将检查任何字符串。我听说过数组,但我觉得我只能限制用户可以拥有多少输入。 Foo似乎需要预先输入编码到程序中?任何人都可以澄清如何做到这一点?

我试过了:

$newdata = array(
                    'user_id' => $rows->id,
                    'user_name' => $rows->name,
                    'user_image' => $rows->user_image,
                    'user_email' => $rows->email,
                    'logged_in' => TRUE,  
                    'user_type' => $rows->user_type
                );
            }
            $this->session->set_userdata($newdata);

4 个答案:

答案 0 :(得分:1)

在C ++中,可调整大小的数组称为“向量”:

vector<int> array;
cout << "Enter your numbers: \n";

int temp;
while (cin >> temp)
    array.push_back(temp);

cout << array.size() << '\n';

答案 1 :(得分:0)

C ++并不是一种快速掌握的语言。有很多警告和设计模式,你几乎需要做大量的学习才能熟悉,不会造成伤害。建议"The big list of books" user4581301是一个很好的开端。

网上也有一些很好的参考资料,但更糟糕的是。

例如,您的问题有几个问题(除了初始化中提到的问题之外)。

我将尝试从更高级别解决两个问题。

  1. 我建议您在 时使用数组。如果可以,请选择不同的抽象。明智地选择您的数据类型。以下是一些标准containers。您还可以使用boost。您可以使用指针将其视为数组,在这种情况下,您可以完全控制内存管理。您甚至可以使用混合方法并使用像向量一样的连续容器,并通过指针访问它。然而,指针和数组相当脆弱,并且容易出错。面对例外,他们更是如此,我建议首先考虑RAII原则。

  2. 根据您计划阅读的数据,您可能需要考虑所使用的类型。您可能还需要考虑编码。我想看看utf-8 everywhere对字符串世界的一些了解。

答案 2 :(得分:0)

  1. 阅读全文。
  2. 按空格分割并获取输入
  3. 检查每个输入的类型
  4. .........

    #include <string>
    #include <iostream>
    #include <vector>
    #include <sstream>
    
    
    std::vector<std::string> split(const std::string &s) {
        std::stringstream ss(s);
        std::string item;
        std::vector<std::string> elems;
        while (std::getline(ss, item, ' ')) {
            elems.push_back(item);
        }
        return elems;
    }
    
    int main()
    {
        std::string line;
        std::getline(std::cin, line);
        std::vector<std::string> elems = split(line); 
        for (int i = 0; i < elems.size; i++)
        {
            /*
            if is number 
              do something
            else
                ignore
            */
        }   
    }
    

答案 3 :(得分:-1)

到目前为止,还存在一些问题,例如变量的多个声明和错误&#39;&#39 ;; for循环可能不应该使用x,因为它已经被定义,并且x在未初始化时不应该是数组大小。

至于你想要做什么,这很难说,但我想我可以提供帮助。

int main()
{
    const int ARRAY_SIZE = 1000; //initialize so it doesn't end up being either 0 or literally anything
    int myArray[ ARRAY_SIZE ];
    for( int x = 0; x < ARRAY_SIZE; x++ )
    {
        cin >> myArray[ x ];
    }
    return 0;
}

现在这将循环1000次,要求输入数字直到数组被写入并且已满,如果你想能够停止数组,你必须添加一种方法来打破for循环和记录它停在哪里。

int main()
{
    const int ARRAY_SIZE = 1000;
    int myArray[ ARRAY_SIZE ];

    int arrayEnd = 0;
    for( int x = 0; x < ARRAY_SIZE; x++ )
    {
        int inputBuffer = 0; // this variable saves the users input and checks to see if the user wants to exit before saving the variable to myArray.
        cin >> inputBuffer;
        if( inputBuffer != -1 ) // -1 is just a value the user enters to stop the loop, choose any number you want for this.
        {
            myArray[ x ] = inputBuffer;
        }
        else
        {
            arrayEnd = x;
            break; // stops the for loop if the number above is entered.
        }
    }

    if( arrayEnd == 0 )
    {
        arrayEnd = ARRAY_SIZE;
    }
    return 0;
}

如果您想要真正无限或更具延展性的整数数组,您可以 new 一个整数数组来设置数组的大小,如此

int main()
{
    int* myArray = nullptr;
    int arraySize = 0;
    cin >> arraySize;

    myArray = new int[ arraySize ];

    for( int x = 0; x < arraySize; x++ )
    {
        cin >> myArray[ x ];
    }

    delete[] myArray;
    return 0;
}

但如果你没有大部分的基础知识,我不建议使用新的,因为新的很容易导致内存泄漏和更多的小事情需要跟踪。