【问题标题】:Store multiple arrays based on user input根据用户输入存储多个数组
【发布时间】:2014-02-07 03:41:07
【问题描述】:

我正在尝试创建一个函数,它允许用户输入多个整数,因此如果用户想要拥有 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
}

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

【问题讨论】:

    标签: c++ arrays


    【解决方案1】:

    它没有得到第一行。它一次获得 1 个整数,因为每行有 5 个整数,并且您在第一行输入了 5,所以最终只能获得第一行中的数字。您的代码中的x 是一个整数数组,它需要有足够的位置容纳所有整数,在这种情况下为 25。如果保证每行有 5 个整数,那么您可以假设分配 5 * length integer-long 位置将起作用.您还需要一个内部 for 循环。 1 for 循环遍历行,另一个循环遍历行上的每个整数。

    【讨论】:

    • 我无法创建第二个 for 循环。我该如何处理?
    • for (int i = 0; i > 数字; x[j] = 数字 } }
    【解决方案2】:

    我建议像这样使用 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)。

    要存储这些令牌,您需要使用vector,因为它们本质上是动态的,并且可以轻松调整大小以适应任何需要。我会在多维向量上see this discussion

    【讨论】:

    • 我好像没跟上。 getline 将抓取任何文本直到换行。你能举个例子来说明你的意思吗?
    • 我做了getline,但它只适用于字符串*抱歉。我会发布一个例子
    • 好的,我明白了。我已更新我的答案以包含更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多