Я начинающий программист и новичок в C++, и хочу научиться. Вот что у меня есть на данный момент:
Эта версия псевдокода, которую мне предоставил инструктор:
if str.find("@")==string::npos OR <-- @ not found
str.find(".")==string::npos OR <-- . not found
str.find(" ")!=string::npos) <-- space found
И мое понимание требований функции:
check emails for @, ., or space function,
if @ exists, no output
if @ doesn't exist, output "This (email) is invalid."
if . exists, no output
if ' ' exists, output "This (email) is invalid."
Вот моя извиняющаяся попытка, которая не работает:
void Roster::printIncorrectEmails()
{
char at = '@';
char pd = '.';
char sp = ' ';
for (int i = 0; i < sizeof(RepoArray); i++) {
string email = Student::RepoArray.getEmailAddress();
size_t found = email.find(at, pd);
if (found != string::npos)
{
cout << "Invalid Email: " << email << '\n';
}
found = email.find(sp);
if (found == string::npos)
{
cout << "Invalid Email: " << email << '\n';
}
}
}
У меня есть много других попыток, если кому-то интересно их увидеть.
Какое определение функции у find? Подсказка: en.cppreference.com/w/cpp/string/basic_string/find
Что такое sizeof(RepoArray)? Что такое RepoArray? Подумайте о создании mcve
Почему pd и at передаются первому find ? (в то же время)





Рекомендация: превратите ваш образец в функцию, которая делает только одно: проверяет, соответствует ли данная строка вашим правилам достоверности.
bool isemailvalid(string email). Таким образом, у вас есть приятная простая функция, не зависящая от чего-либо еще. Теперь вы можете тестировать начинку изолированно, пока не будете абсолютно уверены, что она работает. затем вы можете вызвать функцию, которая получает адрес электронной почты и передает адрес вisemailvalid, зная, что какие бы ошибки у вас ни были, их нет вisemailvalid.