如何将两个对象作为一个元素添加到矢量?

时间:2014-10-13 01:31:37

标签: c++ vector

我在这里写了一段代码来理解一个问题。该程序应该询问您要在一个名为vNumbers的向量中存储多少个数字,然后继续创建一个iNumbers长度的向量(您已经选择的迭代次数)。然后,您将输入您的第一个数字,该数字将被推回到vNumbers中,然后询问您希望将多少个字母放入(存储在每个数字中)将存储在矢量vLetters中。之后它应该打印出vNumbers和vLetters中的内容。我可以让程序接受1个字母的1个数字,但我不能让它有1个数字的多个字母。例如,如果我这样做

  

请输入您要添加的号码数量:

     

2

     

请输入#1

     

100

     

您想添加多少个字母(数字100)

     

2

     

请输入一封信

     

A

     

请输入一封信

     

     

请输入#2

     

200

     

您想添加多少个字母(数字200)

     

1

     

请输入一封信

     

C

我应该得到这个

  

您已输入:

     

100 A B

     

200 C

相反,我得到的是这个,我不知道为什么。

  

100 AB

     

200 ABC

#include <iostream>
#include <string>
#include <cctype>
#include <vector>
#include <algorithm>
using namespace std;



int main()
{
    string sLetters, sLettersB, sLettersC, sLettersA, sNumbers;
    vector<string> vLetters, vNumbers;
    int iLetters, iNumbers;

    cout << "how many NUMBERS would you like to add? ";
    cin >> iNumbers;
    cin.ignore();
    for (int j = 0; j < iNumbers; j++)
    {
        cout << j + 1 << "# Enter number ";
        getline(cin, sNumbers);
        vNumbers.push_back(sNumbers);

        cout << "how many LETTERS would you like to add to " << j + 1 << "#? ";
        cin >> iLetters;
        cin.ignore();
        for (int i = 0; i < iLetters; i++)
        {
            cout << "Enter letter";
            getline(cin, sLettersA);
            sLetters += sLettersA;

        }
        vLetters.push_back(sLetters); // How ever many letters are in sLetters should be added to n-1 index # in vector vLetters
    }
    for (int x = 0; x < vLetters.size(); x++)
    {
        cout << vNumbers[x] << "\t \t" << vLetters[x] << endl;


    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

问题是,在&#34;条目&#34;的迭代之间没有清除sLetters。循环(这就是为什么你第二次得到&#34; ABC&#34;(&#39; AB&#39;是从第一次迭代中遗留下来并保留在sLetters中直到删除)。

但是 - 正如上面的评论所表明的那样,结构/关系存在其他问题。

答案 1 :(得分:1)

您的代码有错误。请参阅下面的评论

    for (int i = 0; i < iLetters; i++)
    {
        cout << "Enter letter";
        getline(cin, sLettersA);
        sLetters += sLettersA;  // sLetters is defined outside for loop and no space

    }

因此,您可以在第一个for循环中定义sLetters或使用clear()

    sLetters.clear();
    for (int i = 0; i < iLetters; i++)
    {
        cout << "Enter letter";
        getline(cin, sLettersA);
        sLetters += ' ' + sLettersA;
    }

或从第3行删除sLetters,稍后再定义

    string sLetters;
    for (int i = 0; i < iLetters; i++)
    {
        cout << "Enter letter";
        getline(cin, sLettersA);
        sLetters += ' ' + sLettersA;  
    }