如何允许用户输入数组索引以及数组的值?

时间:2015-10-23 23:51:28

标签: c++ arrays sorting

#include <iostream>
#include <algorithm>
using namespace std;

int main(){

string m;
int n;

cout << "How many elements would you like to sort?" << endl;

cin >> n;  //index for the array



cout << "Enter " << n << " numbers seperated by a comma to be sorted" <<   endl;

cin >> m;

string unsortedNumbers[n]={m};  // values inputed stored as array values
cout << m << endl;

std::sort(m.begin() , m.end());  //sorting string m
std::cout<< m << endl;

}

我理解代码是错误的,如果运行代码,'string'正常工作直到排序。当排序数字大于10时,它会将它们分解为1和0.此外,所有逗号都会被排序并说明您的输入为2,3,4,5,您的输出将类似于,,,, 2345。所以我的问题是如何让用户选择索引大小,然后允许他们输入的任何数字来确定变量的数量然后进行排序?

3 个答案:

答案 0 :(得分:2)

我只能以一种安静挑剔的方式做到这一点,因为我将字符串转换为char *并最终将char *再次转换为字符串。在我看来,C ++标准库的字符串类使您能够将字符串用作普通类型,从而不会给用户带来任何问题。因此,您可以复制,分配和比较字符串作为基本类型,而无需担心或烦恼内存是否足够或内部存储器有效的时间长短。但是,这也意味着我们只能使用接口而不能做我们想做的任何事情。你知道,基于基本模板类basic_string&lt;&gt;的字符串并且看起来像容器而不是char *。

#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
    string m;
    int n;
    cout << "How many elements would you like to sort?" << endl;
    cin >> n;  //index for the array
    cout << "Enter " << n << " numbers seperated by a comma to be sorted" <<   endl;
    cin >> m;


    //string c[n]={m};
    vector<int> unsortedNumbers;
    const char* p=m.c_str();
    int i=0;
    while(i<n){//or *p!='\0'
        i++;
        unsortedNumbers.push_back(atoi(p));
        while(*p>='0'&&*p<='9') p++;
        if(i<n)p++;
    }
    //std::sort(m.begin() , m.end());  //sorting string m
    sort(unsortedNumbers.begin(), unsortedNumbers.end());
    for_each(unsortedNumbers.begin(), unsortedNumbers.end(), [](int x){cout<<x<<" ";});
    //now we have a sorted array and its type is double[]
    char arr[n][m.length()];
    for(int i=0;i!=n;i++) {
        if(i!=n-1) sprintf(arr[i],"%d,",unsortedNumbers[i]);
        else sprintf(arr[i],"%d",unsortedNumbers[i]);
    }
    m.clear();
    for(auto i:arr)  m+=i;
    cout<<m;
}

答案 1 :(得分:1)

让用户输入数组大小然后在屏幕上对结果进行排序和打印的最简单方法是使用这样的STD方法

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>

int main()
{
    std::cout << "How many elements would you like to sort?" << std::endl;
    std::size_t n;
    std::cin >> n;  //index for the array

    std::cout << "Enter " << n << " numbers seperated by a comma to be sorted" << std::endl;

    std::vector<char> vec;
    vec.reserve(n + n - 1); // array size + commas

    // get array values from user
    std::copy_n(std::istream_iterator<char>(std::cin), vec.capacity(), std::back_inserter(vec));

    // remove commas
    vec.erase(std::remove(vec.begin(), vec.end(), ','), vec.end());

    // sort array
    std::sort(vec.begin(), vec.end());

    // print it 
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<char>(std::cout, " "));
    // input: 2, 3, 1
    // output: 1 2 3
}

答案 2 :(得分:0)

FunctionOne(int &arr[]) {}

void main() {
    int n;
    cout << "How many elements would you like to sort?" << endl;

    cin >> n;  //index for the array



    cout << "Enter " << n << " numbers. Separate by <enter> to be sorted" << endl;
#PRAGMA NUMBER
    int arr[n];
    for (int m:arr)
        cin >> m;
    FunctionOne(&arr);
}

所以你没有我们称之为意大利面条代码的东西,你可以将sort放在一个函数中。这是一种很好的做法。