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
相关产品推荐
相关产品推荐

