根据用户输入存储多个数组

Store multiple arrays based on user input

本文关键字:数组 存储 输入 用户      更新时间:2023-10-16

我正在尝试创建一个函数,它允许用户键入多个数量的整数,因此如果用户想要拥有 3 个不同的存储来保存不同的整数,输入将如下所示:

5 
97 12 31 2 1 //let's say this is held in variable "a"
1 3 284 3 8  // "b"
2 3 482 3 4 // "c"
2 3 4 2 3  // "d"
99 0 2 3 42 // "e"

由于我们不知道用户每次都会输入什么数字,所以我不确定如何创建一个动态分配的数组,每次都会创建一个 x 数量的数组。我希望能够访问 a、b、c、d、e 或任意数量的数组的每个索引。

到目前为止,这就是我所拥有的,但是由于不可预测,因此我在创建数组时遇到了问题。我故意不使用向量,因为我真的不明白指针是如何工作的,所以我试图使用它。

int* x;
int length, numbers;
cin >> length;
x = new int[length]
for (int i=0;i<length;i++)
{
    std::getline(std::cin, numbers); //this didn't work for me
    x[i] = numbers
}

如果有什么不清楚的地方,请告诉我!谢谢!

它没有第一行。它一次得到 1 个整数,由于每行有 5 个整数,并且在第一行输入了 5,因此最终只会得到第一行中的数字。 代码中的x是一个整数数组,它需要有足够的位置容纳所有整数,在本例中为 25。如果保证每行 5 个整数,那么您可以假设分配整数长位置5 * length就可以了。您还需要一个内部 for 循环。1 for用于遍历行,另一个用于遍历行上的每个整数。

我建议像这样使用 cin:

int d;
while(cin){
  cin >> d;
  // Do something with d
  if(cin.peek() == 'n'){
    // Create a new row in your dynamic array
  }
}

这将抓住每个数字到空格。

实现此目的的另一种方法是将带有getline()的字符串与string.empty()结合使用来获取每一行,然后使用 strtok 将行拆分为标记。虽然getline仅适用于字符串,但strtok会将字符串拆分为标记,然后您可以将其转换为 int(或使用 atoi)。

要存储这些令牌,您需要使用向量,因为它们本质上是动态的,可以轻松调整大小以满足任何需求。我会看到关于多维向量的讨论。