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

标签 c string function character

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

for (i=0; i<strlen(str); i++) {
        if ((str[i]>='A' && str[i]<='Z') || str[i] == ' ' || (str[i]>='a' && str[i]<='z') || (str[i]>='0' && str[i]<='9'))


for (i=0; i<strlen(str); i++) {
            char *p = str;
            while (*p) {
                if (isalnum((unsigned char) *p) || *p == ' ') {
                    res =1;
                } else {
                    res = 0;
                }
                    p++;
                }
        }

最佳答案

可以让代码更简洁:

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(N2)。要么将 strlen(str) 的结果缓存在一个变量中,要么根本不使用它。使用strlen(str) 需要扫描整个字符串;上面的代码将在第一个标点符号或其他禁止字符处停止,而不扫描整个字符串(但对于有效字符串,最坏情况下的性能是 O(N))。

关于c - 在字符串中查找空格和字母数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33929282/

相关文章:

c - printf 十六进制格式的 float 返回随机值

c++ - uint8_t 到 String,导致无输出 C++(初级程序员)

c# - 在 DataList 中使用 checkBox 和 textBox

Javascript:如何删除数组中字符串中的特定字符值

javascript - NodeJS buffer.slice() 不是一个函数?

swift - 如何在 swift 中包含多个函数的完成处理程序?

带有变量名的 R missing()

c - getaddrinfo (WinAPI pure C) Visual C++ 2010 访问冲突错误

c - 我有一些关于如何将生成的数据保存在新字符串中的 for 循环中的问题

C - 函数的错误类型冲突