如何在C语言中将数字字符串拆分为数字对并存入二维数组?
问题解决:字符串分组换行与二维数组存储
问题描述
需要完成两个任务:
- 把下面的字符串转换成每行两个数字的格式:
char *myStr = "2 1 3 2 5 2 5 4 6 1 6 2 7 1 7 3 7 4 8 1 ";
目标输出:
2 1 3 2 5 2 ...
- 将这些数字存入二维数组,满足
myArr[0][0] = 2、myArr[0][1] = 1、myArr[1][0] = 3、myArr[1][1] = 2这样的存储规则。
之前尝试用strtok拆分,但输出是每个数字单独一行,代码和结果如下:
const char * separator = " " char * strToken = strtok ( out, separator ); while ( strToken != NULL ) { printf ( "%s\n", strToken); strToken = strtok ( NULL, separator); }
输出:
2 1 3 2 5 2 5 4 6 1 6 2 7 1 7 3 7 4 8 1
解决方案
1. 用strtok实现分组换行
你觉得strtok不行是误解了,它完全能解决这个问题,只需要加个计数器控制输出格式:
#include <stdio.h> #include <string.h> int main() { char myStr[] = "2 1 3 2 5 2 5 4 6 1 6 2 7 1 7 3 7 4 8 1 "; const char *separator = " "; char *strToken = strtok(myStr, separator); int count = 0; while (strToken != NULL) { // 第1个数字后输出空格,第2个后输出换行,循环往复 printf("%s%s", strToken, (++count % 2 == 0) ? "\n" : " "); strToken = strtok(NULL, separator); } return 0; }
运行这段代码就能得到每行两个数字的输出。
2. 将数字存入二维数组
同样基于strtok拆分,把每个字符串数字转成整数后按规则存入数组。原字符串有20个数字,所以定义int myArr[10][2]即可:
#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char myStr[] = "2 1 3 2 5 2 5 4 6 1 6 2 7 1 7 3 7 4 8 1 "; const char *separator = " "; char *strToken = strtok(myStr, separator); int myArr[10][2]; int row = 0; int col = 0; while (strToken != NULL) { // 字符串转整数存入数组对应位置 myArr[row][col] = atoi(strToken); // 切换列索引,满2列就换行到下一行 col++; if (col == 2) { col = 0; row++; } strToken = strtok(NULL, separator); } // 打印数组验证结果 for (int i = 0; i < 10; i++) { printf("myArr[%d][0] = %d, myArr[%d][1] = %d\n", i, myArr[i][0], i, myArr[i][1]); } return 0; }
这段代码通过row和col控制数组的行列索引,每存完一行的两个元素就自动切换到下一行,完美匹配你的存储需求。
内容的提问来源于stack exchange,提问作者ADL92
相关产品推荐
相关产品推荐

