【问题标题】:Read input numbers separated by space and save into an array读取以空格分隔的输入数字并保存到数组中
【发布时间】:2015-11-28 17:41:12
【问题描述】:

我必须编写一个程序,从键盘读取一行数字并将它们保存到一个数组中,数字必须写在一行中,我写了这个但由于无限循环而无法工作,任何建议?

int main() {

    int numCasos = 0, contNumCasos = 0, numElem = 0;
    string aux;
    cout << "Number of cases: " << endl;
    cin >> numCasos;
    while (contNumCasos < numCasos) {

        cout << "Number of elements: " << endl;
        cin >> numElem;
        cout << "Enter the Elements separated by space: " << endl;
        cin.ignore();
        vector.cont = 0;
        int i = 0;
        while ((vector.cont < numElem) && getline(cin,aux,' ')){
            vector.v[i] = stoi(aux);
            vector.cont++;
            i++;
        }
    }

    cout << sumaBuenos(vector) << endl;
    cin.ignore();
    system("pause");
    return 0;
}

示例:
控制台:元素数量:
用户:4
控制台:输入元素以空格分隔:
用户:2 43 65 56
--这必须是向量
-- 向量.v[0] = 2
-- 矢量.v[1] = 43
-- 矢量.v[2] = 65
-- 向量.v[3] = 56

【问题讨论】:

  • 似乎是std:vector&lt;int&gt; input{std::istream_iterator&lt;int&gt;(std::cin), std::istream_iterator&lt;int&gt;()};的冗长替代品
  • 在互联网上搜索可能的重复项:stackoverflow c++ read file vector space separated.
  • 我搜索了,但他们给出的解决方案是从文件中读取,我需要从键盘读取
  • 有趣的事实:cin 和文件流的行为方式相同。如果将文件替换为cin,则从文件读取的函数也可以从cin 读取。

标签: c++ arrays vector


【解决方案1】:

如果你知道你必须读多少个数字,有一个更简单的方法:

int n;
cin>>n; // how many numbers;
vector<int> v(n);
for ( int i=0; i<n; ++i ){
    cin>>v[i];
}

【讨论】:

    【解决方案2】:

    修改一下就可以了。

    int main() {
    
        int numCasos = 0, contNumCasos = 0, numElem = 0;
        string aux;
        cout << "Numero de casos: " << endl;
        cin >> numCasos;
        while (contNumCasos < numCasos) {
    
            cout << "Numero de elementos: " << endl;
            cin >> numElem;
            cout << "Ingrese los elementos separados por espacios: " << endl;
            cin.ignore();
            vector.cont = 0;
            getline(cin, aux);
            istringstream iss(aux);
            for (int i = 0;i < numElem;i++) {
                iss >> aux;
                vector.v[i] = stoi(aux);
                vector.cont++;
            }
            cout << sumaBuenos(vector) << endl;
            contNumCasos++;
        }
    
        system("pause");
        return 0;
    }
    

    给有同样问题的人。

    【讨论】:

    • 不需要 stringstream、getline、aux 或 stoi。
    【解决方案3】:
    #include<iostream>
    using namespace std; 
    
    int main() 
    {   
        int n;
        cout << "input numbers" << endl;
        cin >> n; 
    
        vector<int> v(n);
    
        for ( int i=0; i<n; ++i )
        {
    
            cin >>v[i];
    
        } 
        return 0; 
    
    } 
    

    【讨论】:

      猜你喜欢
      • 2012-10-17
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 2011-11-30
      相关资源
      最近更新 更多