如何允许用户输入数组索引以及数组的值
How to allow user to input array index along with the values of the array?
#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);
}
所以你没有我们所说的意大利面条代码,你可以在一个函数中加入排序。这是很好的做法。
相关文章:
- 数组索引的值没有增加
- 并行用于C++17中数组索引范围内的循环
- 数组索引重载错误
- 通过指针与数组引用扩展数组索引序列
- SIGSEGV, 分段错误. 而 printf() 数组索引的值
- 缓冲区溢出 - 数组索引越界(严重)
- 为什么C++数组索引值是有符号的,而不是围绕size_t类型构建的(或者我错了)
- 查找下一个具有真值C++的数组索引
- 在编译时自动生成用于稀疏数组索引的switch语句
- 在数组索引上引发异常
- C++ 将二维数组索引与条件语句中的函数值进行比较
- 平衡数组索引,同时从左和右对数组求和
- 为什么C ,Devstudio,数组索引工作
- 如何对同一数组索引下的结构成员进行排序?
- 我想返回数组索引,而不是数组值
- C++相当于 Python 的:用于数组索引
- 分段错误:为什么这里的数组索引越界了
- 数组索引在地图上不是整数
- 根据用户输入的每个字母添加到数组索引
- C 数组索引