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

C语言中将字符串/字符数组转换为整数数组的方法与可用函数问询

C语言字符串转整数数组的实现方法

首先明确:C标准库中没有现成的单一函数能直接完成你需求的转换,但可以通过组合几个标准库函数来实现,以下是两种常用的可行方案:

方法一:strtok分割 + atoi转换

strtok可以按指定分隔符(这里是空格、换行)拆分字符串,再用atoi将每个子串转为整数。

示例代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    char temp[] = "1 2\n3 4 \n9 7";
    int arr[10]; // 实际使用时可先统计数字数量再分配合适大小的内存
    int index = 0;
    char *token = strtok(temp, " \n"); // 设定空格和换行作为分隔符

    while (token != NULL) {
        arr[index++] = atoi(token);
        token = strtok(NULL, " \n");
    }

    // 验证结果
    for (int i = 0; i < index; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

注意:strtok会修改原字符串,若原字符串不可修改,需先复制一份再处理。

方法二:sscanf循环读取

sscanf能自动跳过空白字符(空格、换行),从字符串中按格式提取整数,适合处理这类空白分隔的数字串。

示例代码:

#include <stdio.h>

int main() {
    char *temp = "1 2\n3 4 \n9 7";
    int arr[10];
    int arr_idx = 0;
    int num;
    int read_len;
    const char *ptr = temp;

    // 循环读取直到没有可提取的整数
    while (sscanf(ptr, "%d%n", &num, &read_len) == 1) {
        arr[arr_idx++] = num;
        ptr += read_len; // 移动指针到下一个待读取的位置
    }

    // 验证结果
    for (int i = 0; i < arr_idx; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

其中%n用于记录本次sscanf读取的字符数,帮助指针精准移动,避免重复读取。

如果需要更灵活的内存管理,可以先遍历字符串统计数字个数,再用malloc动态分配对应大小的数组内存,防止数组空间不足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:54:23