摆脱向量中的空元素

时间:2018-04-30 00:16:23

标签: c++ string vector

我正在尝试编写一个程序,它从用户那里获取5个或更多动物名称并按数字顺序排列。但是,当我为动物放置一个空间时,它按数字顺序包含空格而不是忽略它。任何帮助将不胜感激。

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

void isolateAnimals() {
    cout << "Enter at least five animal names, e.g., cat, dog, etc..." << endl;
    string animals;
    vector<string>animalVector;
    for (unsigned i = 0; i <= animalVector.size(); i++) {
        getline(cin, animals);
        animalVector.push_back(animals);
        if (i>4 && animals == " ")
            break;
    }

    // this is the part where im trying to get rid of the empty element
    for (unsigned i = 0; i <= animalVector.size()+1; i++) {

        if(animalVector[i].size()>0){
            if (animalVector[i].empty())
                 animalVector.erase(animalVector.begin()+i);

        }
    }

    for (unsigned i = 0; i < animalVector.size(); i++) {
        cout << i + 1 << ". " << animalVector[i] << endl;
    }
}
int main() {
    isolateAnimals();
}

1 个答案:

答案 0 :(得分:0)

如果您已将5个字符串推入向量并且用户输入单个空格字符,则循环将终止。当您稍后尝试清理向量时,您正在搜索空字符串。这不是一回事。

请允许我建议一个看起来不那么怪异的输入循环(我选择使用空行来终止,而不是空格):

while(getline(cin, animals)) {
    if (!animals.empty())
        animalVector.push_back(animals);
    else if(animalVector.size() >= 5)
        break;
}

以上检查输入,然后将其添加到矢量。如果输入流进入错误状态,它也会正常中止。这意味着您以后不需要进行清理循环。

现在,欢迎您添加额外的检查来清理您的输入。这可能就像删除字符串中的空格,然后再检查它是否为空,