我有几个关于 C 中字符串数组的问题。
我有一个数组 char *string
。我有一个 char *string,然后我将每 4 个字符拆分为一个名为 sep_str 的字符串数组。例如,如果 char *string = 'The sum';
,则 char **sep_str
是:
0: |_| --> "The "
1: |_| --> "Sum"
我的第一个问题是,在 C 中的字符串数组(字符数组的数组)中,每个 sep_str[i] 的末尾是否会有一个空终止字符,或者只是在 sep_str 的最后一个位置?以下是我如何将 string
复制到字符串数组中:
for (int i = 0; i < str_length; i++) {
sep_str[i/4][i%4] = *ptr;
ptr++;
}
我的第二个问题是,如何反转 sep_str
中每个字符串的元素?我是这样做的,但是我觉得它正在跳出子字符串的数组。 (所以超出了 sep_str 的元素):
// Reverse each element in the array
char temp;
for (int i = 0; i < num_strs; i++) {
for (int j = 0, k = 4; j < k; j++, k--) {
temp = sep_str[i][j];
sep_str[i][j] = sep_str[i][k];
sep_str[i][k] = temp;
}
}
最佳答案
字符串的副本对我来说听起来不错。由于每个字符串始终有 4 个字符,因此您可以避免空终止符 \0
。或者,您需要将 sep_str
声明为 5x(lenght/4) 矩阵,以在每个字符串的末尾存储\0 字符。
要反转字符串,您需要从字符串的开头迭代到字符串的中间,将第 i
个字符替换为第 length-i-1
个字符.您需要更换内部以将 k=3
替换为 k=2
。
您还需要注意最后一个字符串,因为长度可能不是四的倍数。
char temp;
for (int i = 0; i < (num_strs - 1); i++) {
for (int j = 0, k = 3; j < k; j++, k--) {
temp = sep_str[i][j];
sep_str[i][j] = sep_str[i][k];
sep_str[i][k] = temp;
}
}
if (num_strs > 0) {
for (int j = 0, k = strlen(sep_str[i]) - 1; j < k; j++, k--) {
temp = sep_str[i][j];
sep_str[i][j] = sep_str[i][k];
sep_str[i][k] = temp;
}
}
关于c - C 字符串的反向数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7896876/