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

How to allow user to input array index along with the values of the array?

本文关键字:数组 索引 用户 输入 何允许      更新时间:2023-10-16
#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;
}

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

我只能以一种安静挑剔的方式做到这一点,因为我将字符串转换为字符*,最后再次将字符*转换为字符串。在我看来,C++标准库的字符串类使您能够将字符串用作普通类型,不会给用户带来任何问题。因此,您可以将字符串作为基本类型进行复制、分配和比较,而不必担心或担心是否有足够的内存或内部存储器的有效期。但是,这也意味着我们只能使用接口,不能做我们想做的任何事情。你知道,基于基本模板类的字符串basic_string<>并且看起来像容器而不是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!=''
        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;
}
让用户

输入数组大小,然后在屏幕上排序和打印结果的最简单方法是使用这样的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
}
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);
}

所以你没有我们所说的意大利面条代码,你可以在一个函数中加入排序。这是很好的做法。