Доступ к каждому слову строки с помощью c

#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. Я действительно хотел работать со строками, я уже делал аналогичную программу в массивах символов, неважно. Спасибо за усилия😉