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

时间:2012-03-13 02:18:09

标签: c++

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

#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 [];

看到第一个答案后,只是一个想法。我看,Vector可以自动调整大小,但如果我换成vector,会有什么办法输入1行吗?我刚想到了,我输入了一串数字:1 2 3 4 5,然后我进入。 C ++有没有按空格分割的函数,然后返回数组或向量?在PHP中,我只使用$ array = explode(“”,$ string); &GT; _&LT;

感谢您的帮助,尝试阅读了许多文章&gt; _&lt;

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

你应该使用什么而不是数组,是一个向量。数组要求你事先知道要存储多少元素,如果这个数字是未知的,你必须使用一些一旦你需要超过他们预定的容量,就会涉及内存复制。矢量为你做了这件事。

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

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填充了您输入的整数,只要每个整数用逗号分隔。