字符串只包含有效的字符?

时间:2018-05-20 17:11:56

标签: c++ string

我想要一个字符串来检查字符串是否包含有效字符或不使用C ++。

  

有效字符应与function一样,如有效字符的字符集:“abc123”

只包含上面字符集中给出的字符的字符串应为return true,而后面还包含其他字符的字符串应为return false。显然这是一项简单的任务:)

- >使用charset abc123

string myString_1 = "bbbac1" // should get true 
string myString_2 = "bbbac132aacc" // should get true 

string myString_3 = "xxxxxx" // should get false
string myString_4 = "bbbac12533cc" // should get false 

如何在C ++中实现这样的调用?

注意:我虽然使用类似下面的代码,但我很确定这是一种更好的解决方案。

string charset = "abc123";
string myString = "bbbac1";

for (int i=0; i<charset.length(); i++) {
  std::replace( myString.begin(), myString.end(), charset[i], '');
}
bool isValid = (myString.length() == 0);

2 个答案:

答案 0 :(得分:1)

AS igor-tandetnik在评论中指出这是std::find_first_not_of的工作:

auto validate(const std::string& str, const std::string& charset) -> bool
{
    return str.find_first_not_of(charset) == std::string::npos;
}

答案 1 :(得分:0)

您可以编写自己的检查功能:

bool checkstring(std::string &checkstring, std::string &legalchars) {
    for (char c : checkstring) {
        // resetting the bool
        bool isLegal = false;
        for (char d : legalchars) {
            // comparing the chars
            if (c == d) { isLegal = true; }
        }
        // if a non-legal char was found, return false
        if (!isLegal) { return false; }
    }
    // if no non-legal character was found, return true
    return true;
}

尽管使用标准库可能有更好的替代方法,特别是如果您需要将非常长的字符串与大量合法字符进行比较。