在 C++ 中,s[i] - '0' 和 atoi() 是不是相同?

Posted

技术标签:

【中文标题】在 C++ 中,s[i] - \'0\' 和 atoi() 是不是相同?【英文标题】:In C++, are s[i] - '0' and atoi() same?在 C++ 中,s[i] - '0' 和 atoi() 是否相同? 【发布时间】:2020-08-18 18:32:40 【问题描述】:

atoi()s[i] - '0' 是否相同?

int countSubstrings(string s, int n)

    int count = 0, sum = 0;

    unordered_map<int, int> mp;
    mp[0]++;

    for (int i = 0; i < n; ++i) 

        sum += (s[i] - '0');
          cout << sum << endl;
        count += mp[sum - (i + 1)];
        ++mp[sum - (i + 1)];
    
    return count;

在上面的代码中,我们可以使用atoi()函数来代替s[i] - '0'吗?

【问题讨论】:

atoi() 用于将多字符串转换为数字,s[i] - '0' 仅用于单个数字。 您的意思是用atoi 完全替换s[i]-0 吗?整个循环不仅仅是将字符串转换为 int。 不,你不能。因为循环对字符串中的每个字符求和,所以 atoi 将计算整个字符串的值 (c_str())。 或者std::from_chars,如果你想成为班上最酷的孩子。 【参考方案1】:

不,你不能那样替换它。

atoi() 的参数必须是 C 风格的以空字符结尾的字符串。 s[i] 是单个字符,而不是字符串。因此,如果您想使用atoi(),您首先必须创建一个字符串来保存该字符。

char digit[2] = "";
digit[0] = s[i];
sum += atoi(digit);

【讨论】:

以上是关于在 C++ 中,s[i] - '0' 和 atoi() 是不是相同?的主要内容,如果未能解决你的问题,请参考以下文章

C++中的atoi实现

编写atoi函数

8. String to Integer (atoi)

在 C++ 中使用 atoi 将 char 数组转换为 int 值

了解 atoi() 函数

自己实现atoi的功能