在 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() 是不是相同?的主要内容,如果未能解决你的问题,请参考以下文章