gpt4 book ai didi

c++ - 在 C++ 中消除 std::isalpha() 的歧义

转载 作者:太空狗 更新时间:2023-10-29 20:44:37 25 4
gpt4 key购买 nike

所以我目前正在编写一个接受用户文本输入的程序的一部分。我想忽略所有非字母的输入字符,因此我认为 std::isalpha() 是执行此操作的好方法。不幸的是,据我所知,有两个 std::isalpha() 函数,因此需要将通用函数与特定于语言环境的函数区分开来:

(int(*)(int))std::isalpha()

如果我不消除歧义,std::isalpha 似乎在读取大写字母时返回 true,但在读取小写字母时返回 false(如果我直接打印返回值,则非字母字符返回 0,大写字母返回 1字符,2 个用于小写字符)。所以我需要这样做。

我以前在另一个程序中这样做过,但出于某种原因,在这个项目中,我有时会遇到“ISO C++ forbids”错误。注意,只是有时。这是有问题的代码区域(它们一起出现,中间没有任何东西):

std::cout << "Is alpha? " << (int(*)(int))std::isalpha((char)Event.text.unicode) << "\n";

if ( (int(*)(int))std::isalpha((char)Event.text.unicode) == true)
{
std::cout << "Is alpha!\n";
//...snip...
}

第一个例子,我将返回值发送到 std::cout,工作正常 - 我没有收到任何错误,我得到了预期值(0 表示非 alpha,1 表示 alpha),如果这是只有在我尝试消除歧义的地方,程序才能正常编译和运行。

然而,第二个实例抛出了这个:

error: ISO C++ forbids comparison between pointer and integer

并且只有在我删除 (int(*)(int)) 片段时才会编译,此时会出现不良行为。有没有大神能指教一下?

最佳答案

您正在将std::alpha() 调用的返回值 转换为int(*)(int),然后将该指针与 true 进行比较。将指针与 bool 值进行比较没有多大意义,并且会出现错误。

现在,在没有转换的情况下,您将 std::alpha() 返回的 inttrue 进行比较。 bool 是一个整数类型,为了比较两个不同的整数类型,首先将值转换为相同的类型。在这种情况下,它们都被转换为 inttrue 变为 1,如果 std::isalpha() 返回 2,比较结果为 2 != 1

如果你想将 std::alpha() 的结果与 bool 进行比较,你应该将返回的结果转换为 bool ,或者简单地省略比较并使用类似 if (std::isalpha(c)) {...}

关于c++ - 在 C++ 中消除 std::isalpha() 的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12785609/

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