c++字符串搜索函数

c++ string search functions

本文关键字:函数 搜索 字符串 c++      更新时间:2023-10-16

我有以下功能:

    bool specialChk(string a) 
{
        for (int i = 0; i < a.length(); i++)
        {
            if (a[i] == '`' || a[i] == '~' || a[i] == '!' || a[i] == '@' || a[i] == '#' || a[i] == '$' || a[i] == '%' || a[i] == '^' || a[i] == '&' || a[i] == '*' || a[i] == '(' || a[i] == ')' || a[i] == '-' || a[i] == '_' || a[i] == '=' || a[i] == '+' || a[i] == '[' || a[i] == ']' || a[i] == '{' || a[i] == '}' || a[i] == ';' || a[i] == ':' || a[i] == ''' || a[i] == '"' || a[i] == ',' || a[i] == '<' || a[i]== '>' || a[i] == '.' || a[i] == '/' || a[i] == '?' || a[i] == '|' || a[i] == '')
                return true;
        }
    }
bool digitChk(string a)
{
    for (int i = 0; i < a.length(); i++)
    {
        if (a[i] == '1' || a[i] == '2' || a[i] == '3' || a[i] == '4'|| a[i] == '5' || a[i] == '6' || a[i] == '7' || a[i] == '8' || a[i] == '9' || a[i] == '0')
            return true;
    }
}
int symbolChk(string a) // combining symbol checks
{
    if (specialChk(a) && digitChk(a))
        return 2;
    else if (specialChk(a) || digitChk(a))
        return 1;
    else
        return 0;
}

不管字符串通过,它总是返回2。有人知道为什么吗?

您在失败时忘记了return false

这不是自动发生的;在这种情况下,您的返回值是未指定的。事实上,整个程序都有未定义的行为。

bool specialChk(string a) // ← are you sure you don't want `const string& a`?
{
    for (int i = 0; i < a.length(); i++) {
        if (/* omg at least wrap this */)
            return true;
    }
    return false;  // ← here!
}

digitChk相同。

你也可以试试这个。

#include <string>
using namespace std;
bool specialChk(string a) {
    String checkList = "`~!@#$%^&*()-_=+[]{};:'",<>./?|\";
    for (int i = 0; i < a.length(); i++) {
        if(checkList.find(a[i]))
            return true;
    }
    return false;
}
bool digitChk(string a) {
    for (int i = 0; i < a.length(); i++) {
        if (a[i] >= 48 && a[i] <= 57)
            return true;
    }
    return false;
}
int symbolChk(string a) // combining symbol checks
{
    if (specialChk(a) && digitChk(a))
        return 2;
    else if (specialChk(a) || digitChk(a))
        return 1;
    else
        return 0;
}