我正在尝试编写一个程序,它从用户那里获取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();
}
答案 0 :(得分:0)
如果您已将5个字符串推入向量并且用户输入单个空格字符,则循环将终止。当您稍后尝试清理向量时,您正在搜索空字符串。这不是一回事。
请允许我建议一个看起来不那么怪异的输入循环(我选择使用空行来终止,而不是空格):
while(getline(cin, animals)) {
if (!animals.empty())
animalVector.push_back(animals);
else if(animalVector.size() >= 5)
break;
}
以上检查输入,然后将其添加到矢量。如果输入流进入错误状态,它也会正常中止。这意味着您以后不需要进行清理循环。
现在,欢迎您添加额外的检查来清理您的输入。这可能就像删除字符串中的空格,然后再检查它是否为空,等。