c - C 字符串的反向数组

标签 c arrays string char

我有几个关于 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/

相关文章:

c++ - 传递指向全局 da 的指针

c - 将 int 类型转换为 char,然后搜索数组

c - 为什么 getchar() 不停止读取 C 中的字符串?

c - 我如何从 Visual Studio 2019 中的不同解决方案链接 `.lib` 库?

arrays - 嵌套for循环优化

javascript - 这是将名称搜索到 JavaScript 数组中的正确方法吗?

Java String 忽略大小写实现

Python 3 - 从 HTTP 请求响应中获取一些字符串

c - C 中的位移位

c - STM Nucleo I2C 未发送所有数据