gpt4 book ai didi

c - isalpha 实现 C

转载 作者:行者123 更新时间:2023-11-30 19:11:22 25 4
gpt4 key购买 nike

只是为了好玩,我编写了 isalpha 的这个实现,它可以工作,但我有很多警告,你能告诉我如何修复它们,或者我怎样才能以更好的方式做到这一点?

警告:

第6行:指针和整数的比较

第 23 行:传递“指针”的参数 1 使指针来自整数,无需强制转换

#include <stdlib.h>
#include <stdio.h>

int my_isalpha(char *mark)
{
if((((mark)>=0x41)&&((mark)<=0x5A)||((mark)>=0x61)&&((mark)<=0x7A))) //WARNING
return 1;

else
return 0;
}


int main()
{
char mark;
int (*pointer)(char*);
pointer=my_isalpha;

printf("Your mark: ");
scanf("%c",&mark);

if(pointer(mark)) //WARNING
printf("TRUE");

else
printf("FALSE");

return 0;
}

最佳答案

此代码不可移植,因为标准甚至不保证执行字符集按顺序包含拉丁字母表中的字母。例如,参见 herehere .

这是一个更便携的版本:

int my_isalpha(int c)
{
char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
char *letter = alphabet;

while(*letter != '\0' && *letter != c)
++letter;

if (*letter)
return 1;

return 0;
}

正如 @Dmitri 在评论中指出的那样,如果在运行时更改执行字符集,导致字符的数值不再与编译时相同,则即使此代码也可能会失败。因此,最好使用标准库函数 isalpha(),它利用当前的语言环境。

@KeithThompson 表示我对可移植性的关注可能有些错误,因为 isalpha() 是一个库函数,必须在包含它的实现中工作,但本身不需要编写这是一个很好的观点,除了说我正在解决你问题中提出的部分“我怎样才能以更好的方式做到这一点?”之外,我没有任何真正的辩护。

有了这些警告,我现在就留下我的答案......

关于c - isalpha 实现 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40248520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com