我需要开发一个函数来遍历字符串并检测字母(小写和大写)、数字 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/