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

C++合并int与char数组:指针/非指针实现及arr3数据类型解答

问题说明

当前需求是对两个等长数组,取相同索引位置的char类型元素、int类型元素拼接为字符串,按顺序存入第三个数组,示例输入输出如下:

Input:  arr1 = [a, b, c, d]
        arr2 = [1, 2, 3, 4]
Output: arr3 = [a1, b2, c3, d4]

你之前编写的代码属于两个有序数组的归并逻辑,既没有匹配同索引配对的规则,也没有做跨类型拼接操作,同时参数里的datatype不是C语言内置类型,无法直接编译通过,且两个源数组的参数类型写反了(示例中arr1是char数组、arr2是int数组)。

疑问解答

1. 存储结果的arr3数据类型选择

每个合并结果是字符与数字拼接后的字符串,C语言中字符串用char*类型表示,因此arr3为char*类型的数组即可。

注意:每个字符串需要提前分配内存,单字符+32位带符号int的最大长度(包含负号、字符串结束符\0)不超过16字节,按这个长度分配空间足够。

2. 不使用指针(纯数组下标访问)的实现

这里的不使用指针指不做显式的指针偏移运算,完全通过数组下标定位元素,用标准库sprintf完成字符串拼接,实现代码如下:

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

// 此处默认两个输入数组长度相等,若长度不等可自行补充短数组边界处理逻辑
void mergeArrays(char arr1[], int arr2[], int arrLen, char* arr3[]) {
    for (int i = 0; i < arrLen; i++) {
        // 为当前位置的拼接结果分配16字节内存
        arr3[i] = (char*)malloc(16 * sizeof(char));
        // 按格式拼接字符和整数,存入结果数组对应位置
        sprintf(arr3[i], "%c%d", arr1[i], arr2[i]);
    }
}

int main() {
    char arr1[] = {'a', 'b', 'c', 'd'};
    int arr2[] = {1, 2, 3, 4};
    int len = sizeof(arr1) / sizeof(arr1[0]);
    char* arr3[len];

    mergeArrays(arr1, arr2, len, arr3);

    // 验证输出、释放内存
    for (int i = 0; i < len; i++) {
        printf("%s ", arr3[i]);
        free(arr3[i]);
    }
    return 0;
}

运行后输出为a1 b2 c3 d4,完全匹配示例要求。

3. 使用指针完成操作的实现

通过指针移动替代数组下标定位内存位置,直接操作指针指向的内存值完成拼接,实现代码如下:

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

void mergeArrays(char* pCharArr, int* pIntArr, int arrLen, char** pResArr) {
    char** curRes = pResArr;
    char* curChar = pCharArr;
    int* curInt = pIntArr;
    for (int i = 0; i < arrLen; i++) {
        *curRes = (char*)malloc(16 * sizeof(char));
        sprintf(*curRes, "%c%d", *curChar, *curInt);
        // 指针向后移动一位,指向下一个元素
        curRes++;
        curChar++;
        curInt++;
    }
}

int main() {
    char arr1[] = {'a', 'b', 'c', 'd'};
    int arr2[] = {1, 2, 3, 4};
    int len = sizeof(arr1) / sizeof(arr1[0]);
    char* arr3[len];

    mergeArrays(arr1, arr2, len, arr3);

    // 验证输出、释放内存
    for (int i = 0; i < len; i++) {
        printf("%s ", arr3[i]);
        free(arr3[i]);
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:51:06