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