#c #string
#c #строка
Вопрос:
Я работал над программой, в которой я принимаю входные данные от пользователя в виде строки, а затем нахожу ее длину, используя следующий синтаксис.
getline(cin,password);
length=password.length();
Фактическая работа программы заключается в проверке пароля, где она принимает строковый ввод от пользователя, и разрешены только буквенно-цифровые символы (без символов и пробелов)
Теперь, если пользователь вводит «символы и пробелы», мне нужно получить доступ к каждому слову строки и сообщить пользователю, что введенная строка содержит «символы и пробелы», если таковые имеются, но я не знаю, как получить доступ к каждому слову строки.
Ответ №1:
Вы можете эффективно использовать регулярное выражение для проверки вашего пароля, например, это выражение гарантирует, что в данной строке разрешены только строчные и прописные буквы и цифры: ^[a-zA-Z0-9] $
(от начальной позиции ^
до конечной позиции $
);
Пример кода (онлайн-тест):
#include <iostream>
#include <string>
#include <regex>
using namespace std;
bool validateAlphaNumsOnly(std::string pw) {
std::regex alphanum_only_regex { "^[A-Za-z0-9] $" }; // expression beginning to end lower- and uppercase letters and numbers only
if(std::regex_search(pw, alphanum_only_regex)) {
std::cout << "That's a valid Password! " << pw << std::endl;
return true;
} else {
std::cout << "Invalid Password! " << pw << std::endl;
return false;
}
}
int main() {
validateAlphaNumsOnly("aaa abc");
validateAlphaNumsOnly("aaaYYYabc");
validateAlphaNumsOnly("aaaYYYabc1");
return 0;
}
PS: Мы могли бы также проверить длину с помощью регулярного выражения: ^[a-zA-Z0-9]{8,}$
вместо одного или нескольких
символов нам требуется 8 или более…
Комментарии:
1. OP хотел использовать буквенно-цифровой, а не буквенный пароль. Все еще проголосовал против.
2. @Eugene спасибо, исправлено, я почему-то сначала прочитал «только буквы».
3. @wp78de спасибо за это довольно быстрое решение, но я еще не знаком с регулярными выражениями. 😀
Ответ №2:
Используйте этот метод, istreamamp; get (char* s, streamsize n, char delim); он принимает символы в c-строку до тех пор, пока не будет введено n-1 символов или завершающий символ, который вы можете сделать символом пробела.
char* str[50];
get(str, 50, " ");
int length = strlen(str);
с уважением,
Комментарии:
1. Я действительно хотел работать со строками, я уже делал аналогичную программу в массивах символов, неважно. Спасибо за усилия😉