首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >isalpha始终返回0

isalpha始终返回0
EN

Stack Overflow用户
提问于 2013-03-03 07:37:37
回答 5查看 428关注 0票数 0

下面是我用来检查key是否是一个数字的代码:

代码语言:javascript
复制
string key;
cin>>key;
if(isalpha(atoi(key.c_str())) == 0)
{
     //do something
}
else
    //do something else

无论我输入什么,isalpha总是== 0。我试着用if(isalpha(atoi(key.c_str())))把它当做布尔值来处理,但是它做了同样的事情。

密钥应该是int,但cin.fail()!(cin>>key)也不起作用。

EN

回答 5

Stack Overflow用户

发布于 2013-03-03 07:51:48

在您的代码中,key是一个C++字符串。

代码语言:javascript
复制
string key;

这会将C++字符串转换为C字符串。

代码语言:javascript
复制
key.c_str()

这会将C字符串转换为数字。一个整数。(如果值无法转换,则为0)

代码语言:javascript
复制
atoi(key.c_str())

这将检查该数字是否为字母的ASCII代码

代码语言:javascript
复制
isalpha(atoi(key.c_str()))

将C++字符串转换为C字符串、整数转换为ASCII值,然后检查该值是否为字母表中的字母(这不会告诉您它是数字,而是“字母”或“不是字母”)

只有当用户输入的不是字母的ASCII值时,您编写的if语句才为真。例如,输入65将转到else子句,因为65'A'的ASCII码

试试@chris kindly提供的建议。

代码语言:javascript
复制
try
{
    int the_number = std::stoi(key);
    //do something
}
catch( std::exception& )
{
    //do something else
}
票数 2
EN

Stack Overflow用户

发布于 2013-03-03 07:40:20

您正在定义没有内容的键,并且在它返回指向空数组的字符指针的情况下立即使用它的t_str方法。因此,atoi总是返回零。

请参考此处的http://www.cplusplus.com/reference/cstdlib/atoi/

在给定的示例中,键为空,atoi参数无效,因此atoi始终返回零

票数 0
EN

Stack Overflow用户

发布于 2013-03-03 07:58:09

如果需要测试输入是否为数字,请执行以下操作:

代码语言:javascript
复制
string key;
cin>>key;
if (key.size() && isalpha(*(key.c_str()))
{
    //do something with non-numeric input
}
else
    // numeric input, use atoi to get integer value
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15180713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档