这是关于冒泡排序的代码。
#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;
答案 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
填充了您输入的整数,只要每个整数用逗号分隔。