C++,1 cin为数组输入所有内容
C++ , 1 cin enter everything for array
这是我关于冒泡排序的代码。
#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个元素)。
相关文章:
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- C++逗号分隔的输入数组代码过早退出
- 如何输入数组的元素,每次获得新元素时,我们将其放在数组的中间?
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 使用 cin 输入数组值
- 与 C++ 中一行中的用户输入数组元素相关的问题
- 将整数输入数组的方法比 scanf() 或 cin 更快?
- 如何在C 中动态输入数组
- 我想添加两个字符串类型的矩阵.用户将不会输入行数或列的数量.用户将仅输入数组
- 测试用户输入数组中的重复项的最有效方法是什么?
- 在用户输入数组中查找元音
- 如何将用户输入数组值移动到数组末尾并将其设置为 0
- 函数是否可以用较小的输入数组编写输入数组
- C++ 将数字输入数组并输出
- 需要帮助传递数组和输入数组
- 用户输入数组大小(N).从 0 到 N 的数字填充数组
- 输入int之后的字符的c++输入数组
- 合并排序 - 返回新数组,而不是将合并的数组复制到输入数组
- 在C 函数中声明输入数组的大小
- 在 cpp 中使用 getline 输入数组中的空格分隔数字