首页 > 解决方案 > 使用 C++ 访问字符串的每个单词

问题描述

我正在开发一个程序,我以字符串的形式从用户那里获取输入,然后使用以下语法找到它的长度。

getline(cin,password); 
length=password.length();

程序的实际工作是进行密码验证,它从用户那里获取字符串输入,并且只允许使用字母数字字符(没有符号和空格)

现在,如果用户输入“符号和空格”,我需要访问字符串的每个单词并让用户知道输入的字符串包含“符号和空格”(如果存在),但我不知道如何访问字符串的每个单词。

标签: c++string

解决方案


您可以充分利用正则表达式来检查您的密码,例如,此表达式确保在给定字符串中只允许使用小写和大写字母和数字:(^[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:我们也可以使用正则表达式检查长度:我们需要 8 个或更多^[a-zA-Z0-9]{8,}$而不是一个或多个+字符...


推荐阅读