数组偶位字符组交换及字符串编码函数开发技术咨询
我来帮你详细实现这两个编程需求,下面分两部分逐一说明并给出代码示例:
需求1:数组中相邻偶位字符对交换
首先明确需求:将数组按每两个字符为一组,把相邻的两组交换位置(即第1组与第2组交换,第3组与第4组交换,以此类推)。如果数组总长度无法被4整除,剩余的1或2个字符保持原位置不变。
举个直观例子:
- 原数组:
['A','B','C','D','E','F','G'] - 分组后:
[AB, CD, EF, G] - 交换后:
[CD, AB, EF, G]
代码实现(C语言)
void swap_pair_groups(char arr[], int length) { // 每次处理4个字符(两组),步长设为4 for (int i = 0; i < length - 3; i += 4) { // 交换第一组和第二组的第一个字符 char temp = arr[i]; arr[i] = arr[i+2]; arr[i+2] = temp; // 交换第一组和第二组的第二个字符 temp = arr[i+1]; arr[i+1] = arr[i+3]; arr[i+3] = temp; } }
需求2:字符串编码函数
encode 根据需求描述和示例,编码规则可以拆解为:
- 将字符串按顺序每两个字符分为一组,每组的第一个字符归入组A,第二个字符归入组B;
- 若字符串长度为奇数,最后一个单独字符直接保留在结果末尾;
- 按「组B的第n个字符 + 组A的第n个字符」的顺序合并两组,最后追加单独字符(如果有)。
比如示例"KILOS":
- 分组:组A =
['K','L'],组B =['I','O'],单独字符'S' - 合并:
I+K+O+L+S→"IKOLS"
代码实现(C语言)
要求s2指向编码后的结果字符串,我们需要先为s2分配足够的内存:
#include <stdio.h> #include <stdlib.h> #include <string.h> void encode(const char* s1, char** s2) { int len = strlen(s1); // 分配内存,长度与原字符串一致(含结束符) *s2 = (char*)malloc((len + 1) * sizeof(char)); if (*s2 == NULL) { perror("Memory allocation failed"); return; } int result_idx = 0; // 处理每一组两个字符 for (int i = 0; i < len - 1; i += 2) { // 先放入组B的字符(原字符串第i+1位) (*s2)[result_idx++] = s1[i+1]; // 再放入组A的字符(原字符串第i位) (*s2)[result_idx++] = s1[i]; } // 处理奇数长度的最后一个字符 if (len % 2 != 0) { (*s2)[result_idx++] = s1[len - 1]; } // 添加字符串结束符 (*s2)[result_idx] = '\0'; } // 测试示例 int main() { const char* test_str = "KILOS"; char* result = NULL; encode(test_str, &result); printf("编码结果:%s\n", result); // 输出 IKOLS free(result); // 记得释放内存 return 0; }
额外说明
- 函数通过二级指针
s2返回编码后的字符串,调用端需要负责释放内存,避免泄漏; - 逻辑完全匹配示例要求,奇数长度的末尾字符会被正确保留;
- 内存分配做了错误判断,提升代码健壮性。
内容的提问来源于stack exchange,提问作者user8249477
相关产品推荐
相关产品推荐

