如果一个字符,让我们说“ 9”,我减去“ 0”,并且我在结果上使用的是数字,我是对还是错

时间:2019-08-18 09:47:43

标签: c++

如果一个字符,让我们说“ 9”,我减去“ 0”,并且我在结果上使用的是数字,我是对还是错

我正在使用leetcode尝试atoi,并且关于功能的一个基本概念问题是数字卡住了我。

if(isdigit(str[i]-'0')==false){
    return str[i]-'0';
    break;
}

输入: “ 42” 输出: 4 预期: 42

我想知道如果str [i]等于char'0',isdigit函数是否会返回true

2 个答案:

答案 0 :(得分:3)

没有isdigit对字符进行运算而不对整数进行运算,因此正确的代码是

isdigit(str[i]) == false

您正在混淆两种不同的事物,isdigit(str[i])测试str[i]是否为数字(即'0''1''2'等)和{ {1}}将数字转换为数字值。

答案 1 :(得分:0)

isdigit接受int(即字符代码)并将其与数字字符的字符代码进行比较。 ASCII:

'0' - 48
'1' - 49
'2' - 50
'3' - 51
'4' - 52
'5' - 53
'6' - 54
'7' - 55
'8' - 56
'9' - 57

因此,例如,如果您使用'4'-'0',则结果为52-48 =4。4是EOT的字符代码,而不是数字。您可以看到,如果您的字符串由数字组成,它将永远不会返回true。如果您在字符串中使用其他字符,则可以返回true,例如:

#include <iostream>
#include <string>
#include <cctype>

int main() 
{
    std::string str = "g";

    if (std::isdigit(str[0]-'0'))
        std::cout << "Success: " << int(str[0]-'0');
    else
        std::cout << "No cigar";
    return 0;
}

结果是55,因为'g'是103,'0'是48。103-48 = 55,而55是'7'的字符代码