You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将单个字符型数字转为整数?为何atoi(c[i])无法转换?

问题原因与解决方案

为什么atoi(c[i])无法转换单个字符?

atoi函数的参数要求是指向C风格字符串的指针(const char*),它会从指针指向的位置开始读取连续字符,直到遇到非数字字符,再将这段字符串转为整数。

而你代码里的c[i]是单个char类型字符,把它传给atoi时,编译器会把这个字符的ASCII值当作内存地址处理——这不是合法的字符串指针,会直接触发未定义行为(比如程序崩溃、输出垃圾值),完全达不到转换单个字符数字的目的。

正确的转换方法

方法1:利用ASCII码差值(最常用、高效)

字符数字('0'到'9')的ASCII码是连续的,'0'的ASCII值为48,单个字符数字减去'0'就能得到对应整数:

ar[i] = c[i] - '0';

方法2:构造临时字符串再用atoi

如果一定要用atoi,需要把单个字符包装成合法的C风格字符串(必须以'\0'结尾):

char temp[2] = {c[i], '\0'};
ar[i] = atoi(temp);

修正后的完整代码

#include <bits/stdc++.h>

using namespace std;

int main() {
    char c[100];
    int ar[50];
    cin >> c;
    int len = strlen(c); // 将strlen移到循环外,避免重复计算
    for (int i = 0; i < len; i++) {
        if (c[i] >= '0' && c[i] <= '9') {
            ar[i] = c[i] - '0'; // 使用ASCII差值完成转换
        }
    }
    // 可选:验证转换结果
    for (int i = 0; i < len; i++) {
        if (isdigit(c[i])) {
            cout << ar[i] << " ";
        }
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Mohonta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:06:26