Я работаю над простой демографической программой. Введите данные и выведите их в файл csv. У меня возникает вопрос о проверке ввода данных для имени. Проверка корректна, если вводится только номер, но если я дважды вводим буквенно-цифровую строку, это не сработает. Например, если я набираю Max1, я получаю исключение, если я снова нахожу Max1, он просто переходит к следующему вызову функции. Однако, если я введу только строку цифр он не будет двигаться дальше, пока не будет введен правильный альфа только строка или две строки буквенно-цифровогоВопросы проверки строки строки
#include <iostream>
#include <vector>
#include "People.h"
int main()
{
const short elements = 2;
PersonalData Demographics;
std::string input;
std::vector<std::string> response;
for (int i = 0; i < elements; i++)
{
std::cout << "Please enter first name of child: " << i+1 << std::endl;
std::cin >> input;
response.push_back(input)
Demographics.setName(response);
}
return 0;
}
People.hpp
#ifndef PEOPLE_H_INCLUDED
#define PEOPLE_H_INCLUDED
#include <vector>
class PersonalData
{
private:
std::vector<std::string> name;
public:
void setName(std::vector<std::string>&); //get the names of each person
};
#endif // PEOPLE_H_INCLUDED
People.cpp
#include <iostream>>
#include "People.h"
#include <vector>
void PersonalData::setName(std::vector<std::string> &names)
{
string retry;
bool valid=false; // we start by assuming that the entry is not valid
std::string::const_iterator it;
while(!valid) //start validation loop
{
for(int i=0; i <names.size(); i++)
{
for(it = names[i].begin(); it != names[i].end(); ++it) //start loop to check type of each char in string
{
if(isalpha(*it)) //if it is char set name to user names
{
name=names;
valid = true; //the entry was valid, jump out of loop
}
else //it was not just char, try again
{
std::cout << "Name should be alphabetic only. Try again: " <<endl;
std::cin >> retry;
names.erase(names.begin()+i); // remove the bad non-alphabetic entry from the names array
names.push_back(retry);
break;
}
}
}
}
}
Эта целая петля может быть заменена на 'std :: remove_if/erase' простой лямбдой. Кроме того, почему вы начинаете создавать плохие имена в своем векторе? Почему бы не проверить перед тем, как поместить имя в вектор? – PaulMcKenzie
Хорошо, это имеет смысл. Просто удалите все, что не является альфа-символом. Не знаю, существует ли опция remove if. Я все еще довольно новый, как вы можете сказать. Не знаю, что такое лампа, но я могу ее исследовать. – NoiseyAgent