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

