在字符串中查找空格和字母数字字符

时间:2015-11-26 01:38:00

标签: c string function character

我需要开发一个通过字符串并检测字母(大写和小写),数字0-9和空格''的函数。如果函数只找到有效字符(前面列出的字符),则返回1,否则返回1(如果字符串有!,&,/,£等字符),则返回0.我知道找到字符的函数数字是isalnum()。这对查找空格没有帮助。有没有人可以提供内置或手动功能,可以一起检测字符,数字和空格。 我已经开发了我的但是函数没有在字符串的中间检测到无效字符!,&,/,£等因此它不会返回我期望的值。

.git/logs/HEAD

2 个答案:

答案 0 :(得分:1)

您可以使代码更简洁:

int Validate_Alphanumeric(char *str)
{
    unsigned char *ptr = (unsigned char *)str;
    unsigned char uc;

    while ((uc = *ptr++) != '\0')
    {
        if (!isalnum(uc) && uc != ' ')
            return 0;
    }
    return 1;
}

除此之外,这避免了在循环的每次迭代中重新评估strlen(str);名义上使算法二次为strlen()是一个O(N)操作,你会做N次,总共O(N 2 )。将strlen(str)的结果缓存在变量中或根本不使用它。使用strlen(str)需要扫描整个字符串;上面的代码将停止在第一个标点符号或其他verboten字符而不扫描整个字符串(但对于有效的字符串,最坏情况下的性能是O(N))。

答案 1 :(得分:0)

我想出了一个能够通过字符串的函数,如果一个无效的字符(例如$& $&&(%$(=()/)&)/),它就能返回0找到了。

int Validate_Alphanumeric (char str[]) {

    int i;
    int res;
    int valid=0;
    int invalid=0;


        const char *p = str;
        while (*p) {
            if (isalnum((unsigned char) *p) || *p == ' ') {
                valid++;
            } else {
                invalid++;
            }
                p++;
            }

        if (invalid==0)
            res=1;
        else
            res=0;

    return res;
}