如何将C字符串转换为单个整数并实现数字各位求和?
修正数字字符数组求和的C++代码
我来帮你把这段代码的问题理顺,实现输入数字字符数组并计算各位之和的功能:
原代码的核心问题
- 缓冲区溢出风险:
char numbers[] = "a"只分配了2个字符的空间(包含结束符'\0'),输入超过1个字符就会越界,触发未定义行为。 - 未定义的
size变量:遍历循环里的size没有声明和赋值,应该用strlen(numbers)获取输入字符串的实际长度。 - 错误的字符转整数方式:
atoi(numbers[i])用法错误,atoi需要传入C风格字符串指针,单个数字字符转整数应该利用ASCII码特性:数字字符 - '0'(比如'5' - '0'会得到整数5)。 - 不完整的输出语句:最后
cout &...是语法错误,需要补全输出逻辑。
修正后的完整代码
#include <iostream> #include <cstring> #include <cctype> // 用于isdigit函数 using namespace std; int main() { // 定义足够大的字符数组避免溢出,也可以用std::string更安全 char numbers[100]; cout << "Input a series of single digit numbers." << endl; cin >> numbers; int sum = 0; // 用strlen获取字符串实际长度,遍历每个字符 for (int i = 0; i < strlen(numbers); i++) { // 检查输入是否为数字字符,避免非数字输入导致错误计算 if (isdigit(numbers[i])) { sum += numbers[i] - '0'; } else { cout << "Warning: '" << numbers[i] << "' is not a digit, skipped." << endl; } } cout << "Sum of all digits: " << sum << endl; return 0; }
额外优化建议
如果想让代码更简洁安全,推荐用std::string代替字符数组,不需要手动管理内存:
#include <iostream> #include <string> #include <cctype> using namespace std; int main() { string numbers; cout << "Input a series of single digit numbers." << endl; cin >> numbers; int sum = 0; // 用范围for循环遍历字符串更直观 for (char c : numbers) { if (isdigit(c)) sum += c - '0'; } cout << "Sum of all digits: " << sum << endl; return 0; }
内容的提问来源于stack exchange,提问作者Louis Pelletier
相关产品推荐
相关产品推荐

