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

如何在C语言中将数字字符串拆分为数字对并存入二维数组?

问题解决:字符串分组换行与二维数组存储

问题描述

需要完成两个任务:

  1. 把下面的字符串转换成每行两个数字的格式:
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
...
  1. 将这些数字存入二维数组,满足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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:05:23