我创建了一个函数来检查用户是否输入了一个不包括所有其他非字母字符的真实姓名。 好吧,在我看来,作为C语言的初学者,它的工作正常。 无论如何我只有一个小问题,带有字符串名称,如果该字符串中有空格我得错了Name,但如果只有一个名字(michi)一切都好。
#include <stdio.h>
#include<string.h>
/* Here is the Function which check if the string contains only: */
/* abcdefghijklmnopqrstuvwxyz and ABCDEFGHIJKLMNOPQRSTUVWXYZ */
int checkName(char *s){
int i,length;
length = (strlen(s));
for (i=0;i<length;i++){
if(s[i] == '0' || s[i] <= '9'){
return 1;
}
}
return 0;
}
int main(){
char name[]= "Michi";
int check;
if((check = checkName(name)) == 0){
printf("\n\n\t\t\tYour name is:\t%s\n\n",name);
}else{
printf("\n\n\t\t\tWrong name:\t%s\n\n",name);
}
return 0;
}
我的问题是: 1) 我找到了一种正确的方法来检查字符串是否只包含非字母字符。 2) 如何扩展我的函数以跳过空格
答案 0 :(得分:5)
查看isalpha
中的ctype.h
。如果true
是一个字母,则会返回char
,就像您想要的那样。
http://www.cplusplus.com/reference/cctype/isalpha/
顺便说一句,如果您正在检查ASCII编码,则您的函数会因“('或'〜'等字符而失败。
答案 1 :(得分:4)
如果你有一个有效的集合,则对这个集合进行测试,而不是其他可能或可能不是补集集合的集合(一个句子中有这么多集合: - ):
for (i=0; i<length; i++) {
int valid = 1;
valid &= s[i] >= 'a' && s[i] <= 'z';
valid &= s[i] >= 'A' && s[i] <= 'Z';
valid &= s[i] == ' ';
if (!valid) {
return 0; // or any value you prefer to indicate "not valid"
}
}
答案 2 :(得分:4)
这是检查字符串是否仅包含的函数: abcdefghijklmnopqrstuvwxyz和ABCDEFGHIJKLMNOPQRSTUVWXYZ
查看该声明下方的代码,您就撒谎了。您的代码所做的是检查字符串中是否有0
字符或9
下面的任何字符。更好地做你所说的:
if((str[i] >= 'a' && str[i] <= 'z') ||
(str[i] >= 'A' && str[i] <= 'Z') ||
(str[i] == ' ')) {
// fine ..
}
else {
// not fine!
}
如您所见,我将空格添加到允许的字符集中。要摆脱if分支只是否定整个测试表达式(手动或使用not
运算符!
)。
由于ASCII表的布局,比较正在以这种方式进行。
请注意,这里有一个库函数:isalpha
答案 3 :(得分:2)
如果您只想检查字母字符和空格,可以使用isapha
中的isspace
和ctype.h
。这些函数为ture
返回非零值,为false
返回零。
答案 4 :(得分:1)
如果角色是空格,您可以继续循环:
public Player[] getAllPlayers() {
Player[] result = new Player[players.size()];
return players.values().toArray(result);
}
此外,您还可以通过检查所有字符是否不在接受的字符范围内来确保它不包含任何其他字符而不仅仅是字母:
for (i=0;i<length;i++){
if(s[i] == ' '){
continue;
}
else if(s[i] == '0' || s[i] <= '9'){
return 1;
}
}
注意:ASCII table是一个很好的“工具”,用于确认您必须检查的范围。