如果一个字符,让我们说“ 9”,我减去“ 0”,并且我在结果上使用的是数字,我是对还是错
我正在使用leetcode尝试atoi,并且关于功能的一个基本概念问题是数字卡住了我。
if(isdigit(str[i]-'0')==false){
return str[i]-'0';
break;
}
输入: “ 42” 输出: 4 预期: 42
我想知道如果str [i]等于char'0',isdigit函数是否会返回true
答案 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'的字符代码