gpt4 book ai didi

c++ - 了解如何创建 atoi;字符是如何比较的?

转载 作者:可可西里 更新时间:2023-11-01 17:41:46 26 4
gpt4 key购买 nike

我正在努力提高我对 C++ 的理解,尤其是指针算法。我经常使用 atoi,但我很少考虑它是如何工作的。查看它是如何完成的,我大部分都明白了,但有一件事我很困惑。

下面是我在网上找到的解决方案示例:

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,并且它大于-or-equal-to 0 然后做一些事情。这句话告诉我两件事:

  1. 字符可以与其他字符进行逻辑比较(但返回值是多少?)。

在我研究这个之前,我想我下意识地知道它,但我从来没有真正想过,但是“5”字符比“6”字符“小”,就像 5 小于 6 一样,所以您基本上可以将字符作为整数进行比较(出于此目的)。

  1. 不知何故 while (*sPtr) 和 *SPtr != 0 是不同的。这对我来说似乎很明显,但我发现我无法用语言表达,这意味着我知道这是真的,但我不明白为什么。

编辑:我不知道 *pStr - '0' 部分会做什么。

任何有助于理解这些观察结果的信息都会非常……有帮助!谢谢!

最佳答案

while the character exists

不,不是真的。它说“虽然字符不是 0(或 '\0')。基本上,ASCII 字符 '\0' 表示“C”字符串的结尾。因为你不想超过字符数组的末尾(并且不知道确切的长度),每个字符都针对 '\0' 进行测试。

Characters can be compared to other characters logically

没错。字符只不过是一个数字,好吧,至少在 ASCII 编码中是这样。例如在ASCII中,'0'对应十进制值48'1'为49,'Z' 是 90(你可以看看 ASCII Table here )。所以是的,您可以像比较整数一样比较字符。

Somehow while (*sPtr) and *sPtr != 0 are different.

完全没有区别。十进制 0 是一个特殊的 ASCII 符号 (nul) ,用于指示“C”字符串的结尾,正如我在开头提到的。您看不到或打印 (nul),但它就在那里。

关于c++ - 了解如何创建 atoi;字符是如何比较的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14615162/

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