std::cin字符串到具有可变长度输入的int数组

  • 本文关键字:int 数组 字符串 cin std c++
  • 更新时间 :
  • 英文 :


我有一个任务,需要恢复可变长度数字的列表。这可以是";1 2 3";或";5 6 7 8 9 10〃;。排序本身运行良好。但我不知道如何读取用户输入(长度可变(,然后只执行一次reverseSort。如何将用户输入读取到数组中,其中每个索引都基于数字之间的空格?

这是我的代码:

#include <iostream>
#include <string>

using namespace std;
bool sorted = true;
int temp;
int * arr;
int arrLength = 5;
int arrs;
// int arr = {1,2,3,4,5};
void reverseSort(int arr[], int n){
sorted = true;
for (int i = 0; i < n-1; i++){
if (arr[(i + 1)] > arr[i]){
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
sorted = false;
} 
}
if (!sorted){
reverseSort(arr,n);
} 
}
int main(void){
// get user input !?!?!?!?!
cin >> arrs;

cout << arrs;
reverseSort(arr,arrLength);
for (int i = 0; i < arrLength; i++){
std::cout << arr[i] << " ";
} 
return 0;
}

如果您不知道输入的数量,则需要可以调整大小的结构。std::vector很好。对于添加新数据,可以使用成员函数push_back
您可以将输入行读取为std::string(通过std::getline(,并可以用读取的数据打开新的流(std::istringstream(。此外,还可以从新的流中读取值
我认为您可以使用std::sort而不是reverseSort(但对于"reverse",您需要使用std::great作为比较器(。

#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
int main(void){

std::vector<int> arrs;

// read only one line
std::string input;
std::getline(std::cin, input);
std::istringstream row(input);
int x;
while (row >> x)
{
arrs.push_back(x);
}

//like your reverseSort
std::sort(arrs.begin(), arrs.end(), std::greater<int>{});

for (auto var : arrs) {
std::cout << var << "; ";
}

return 0;
}

最新更新