以下是我在网上找到的一个解决方案示例:
int atoi( char* pStr )
{
int iRetVal = 0;
if ( pStr )
{
while ( *pStr && *pStr <= '9' && *pStr >= '0' )
{
iRetVal = (iRetVal * 10) + (*pStr - '0');
pStr++;
}
}
return iRetVal;
}
我认为我过去很难理解atoi的主要原因在于字符比较的方式。"while"语句表示只要该字符存在,且该字符小于等于9,且大于等于0,就执行某些操作。这个语句对我来说有两层意思:
- 字符可以逻辑上与其他字符进行比较(但返回值是什么?)。
在我查看这个之前,我想我下意识地知道,但我从来没有真正思考过,但是'5'字符与'6'字符相比较的方式与5小于6的方式相同,因此您可以将字符作为整数进行比较(为此目的)。
- 不知何故,* sPtr和* SPtr!= 0是不同的。这对我来说似乎很明显,但我发现我无法用言语表达出来,这意味着我知道这是真的,但我不明白为什么。
编辑:我不知道* pStr - '0'部分会做什么。
希望能帮助您理解这些观察结果!谢谢!
while(*s)
和while(*s != 0)
是等同的。在 C 语言中,非零整数被视为“真”。 - nneonneowhile(*s != 0)
和while(*s != '0')
并不相同,因为0
是数字0,而'0'
是字符'0'(其ASCII值为48)。 - nneonneo'0'!= 0
。*pStr <= '9' && *pStr >= '0'
检查*pStr
是否为数字。 - Grizzly