在C++中,s[i] - '0'
和 atoi()
函数在处理字符串转换为整数时有一些重要的区别。
s[i] - '0'
:s[i]
是一个数字字符('0' 到 '9')。'0'
的ASCII值,可以得到对应的整数值。atoi()
:atoi()
是一个标准库函数,定义在 <cstdlib>
头文件中。atoi()
返回0。s[i] - '0'
atoi()
s[i] - '0'
#include <iostream>
#include <string>
int main() {
std::string s = "123";
int num = s[0] - '0'; // 只转换第一个字符
std::cout << "Number: " << num << std::endl; // 输出: Number: 1
return 0;
}
atoi()
#include <iostream>
#include <cstdlib>
#include <string>
int main() {
std::string s = " 123abc";
int num = atoi(s.c_str()); // 转换整个字符串,忽略前导空格和非数字字符
std::cout << "Number: " << num << std::endl; // 输出: Number: 123
return 0;
}
atoi()
会忽略非数字字符,但如果你使用 s[i] - '0'
并且字符不是数字,会导致未定义行为。s[i] - '0'
之前,确保字符是数字。if (s[i] >= '0' && s[i] <= '9') {
int num = s[i] - '0';
// 处理 num
}
atoi()
在处理空字符串或无效字符串时会返回0,这可能不是预期的行为。atoi()
之前,检查字符串是否有效。if (!s.empty()) {
int num = atoi(s.c_str());
// 处理 num
}
s[i] - '0'
和 atoi()
都可以用于字符串到整数的转换,但它们的适用场景和功能有所不同。s[i] - '0'
更适合单个字符的简单转换,而 atoi()
更适合处理整个字符串并忽略非数字字符。在使用时,应根据具体需求选择合适的方法,并注意处理可能的异常情况。
领取专属 10元无门槛券
手把手带您无忧上云