單次遍歷,維護兩個目的地指標,索引計數器判斷奇偶。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void split_odd_even(const char *src, char *odd, char *even) {
int idx = 0;
while (*src) {
if (idx % 2 == 0) *odd++ = *src; // 0-based 偶數索引 → 邏輯第 1,3,5... 字元
else *even++ = *src; // 奇數索引 → 第 2,4,6...
++src;
++idx;
}
*odd = '\0';
*even = '\0';
}
int main() {
const char *src = "1a2b3d4z";
char *odd = malloc(strlen(src)+1);
char *even = malloc(strlen(src)+1);
split_odd_even(src, odd, even);
printf("奇數位(1-based): %s\n", odd); // 1234
printf("偶數位(1-based): %s\n", even); // abdz
free(odd); free(even);
return 0;
}
| 術語 | 0-based 索引 | 1-based 位置 | 範例字元 |
|---|---|---|---|
| 奇數位 | 偶數 (0,2,4...) | 1,3,5... | 1,2,3,4 |
| 偶數位 | 奇數 (1,3,5...) | 2,4,6... | a,b,d,z |
程式中 idx%2==0 對應 1-based 奇數位,符合人類直覺說法。