C++,1 cin为数组输入所有内容

C++ , 1 cin enter everything for array

本文关键字:输入 数组 cin C++      更新时间:2023-10-16

这是我关于冒泡排序的代码。

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;
void swap(int &a, int &b) {
    int * x = &a;
    int * y = &b;
    int tmp = * x;
    * x = * y;
    * y = tmp;   
}

int main()
{
    // INPUT
    int size;
    int i=0;
    int A[80];
    cout << "How many number in your list A ? ";
    cin >> size;
    for(i=0;i<size;i++) {           
        cout << " A[" << i << "] = " ;
        cin >> A[i];
    }
    // PRINT LIST
    cout << "This is your list number: ";
    cout << endl;
    for(int i=0; i<=size -1;i++) {
        cout << A[i] << " ";
    }

    // WHILE LOOP , continue if swapped;
    bool swapped = true;
    int pass=0;
    while(swapped == true) {
        swapped = false;
        // Increase Pass
        pass++;
        cout << endl << endl << "Pass " << pass << ":";
        // Loop size - Pass;
        for( i=1; i<=size - pass;i++) {
            // check if X > Y
            if(A[i-1] > A[i]) {
                // true, doing swap
                swap(A[i-1], A[i]);
                // set swapped to continue next loop
                swapped = true;
            }       
            // Print list again after sort;
            cout << endl;
            for(int i=0; i<=size -1;i++) {
                cout << A[i] << " ";
            }

        }               
    }
    // PRINT after sort;
    cout << endl << endl << "Your list after sort: ";       
    for(int i=0; i<=size -1;i++) {
        cout << A[i] << " ";
    }
    cout << endl;
    system("pause");
    return 0;
}

在这个代码上,我必须输入金额的数量(大小),然后输入每个A[i]。但我想改进这个代码,我可以不需要输入金额(大小),只需要输入整个A吗?

类似:

Please enter your list number: 5 1 4 2 8 [enter]

我得到了整个A[];

只是看到第一个答案后的一个想法。我明白了,矢量可以自动调整大小,但如果我改成矢量,有没有办法输入1行?我刚刚有了一个想法,我输入了一个数字串:1 2 3 4 5,然后我输入。C++有任何函数可以被空间分割,然后返回到数组或向量吗?在PHP中,我只使用$array=explose(",$string);>_<

感谢您的帮助,尝试阅读了许多文章>_<

应该使用向量来代替数组数组要求您提前知道将存储多少元素,如果这个数字是未知的,那么一旦您需要超过它们的预定容量,就必须使用一些相当复杂的内存复制。Vectors在引擎盖下为您做到这一点。

这里有一个例子,基本上执行你的要求,使用向量:

std::vector<int> intList;
std::string inputStr;
std::cin >> inputStr;
std::string subStr;
for ( std::string::iterator _it = inputStr.begin(); _it != inputStr.end(); ++_it )
{
    if ( *_it == ',' )
    {
        intList.push_back( atoi( subStr.c_str() ) );
        subStr.clear();
    }
    else
        subStr.push_back( *_it );
}
if ( subStr.size() > 0 )
    intList.push_back( atoi( subStr.c_str() ) );

现在intList是用您输入的整数填充的,只要每个整数用逗号分隔即可。

要做您想做的事情,最简单的方法是使用某种终止标记,它是数组的末尾。例如,您可以使用单词"done"或数字-999来表示结束。然后,你会有一个像一样的do…while循环,而不是一个for循环来读取

do
{
   std::string foo;
   cin >> foo;
    ...
} while (foo != "done");

请注意,您可能想要将A[]变量从常规数组更改为std::vector。然后它将存储它。它将自动展开,并为您的输出存储自己的大小。否则,您将不得不保留另一个变量来存储放入的元素数量(并且您的用户不能输入超过80个元素)。