首页 > 解决方案 > 反转没有两个循环的字符串?

问题描述

我想出了以下基本项来反转 C 中的字符串:

void reverse(char in[], char out[]) {

    int string_length = 0;

    for(int i=0; in[i] != '\0'; i++) {
        string_length += 1;
    }

    for(int i=0; i < string_length ; i++) {
        out[string_length-i] = in[i];
    }
    out[string_length+1] = '\0';
}

有没有办法在一个for循环中做到这一点,或者是否有必要首先使用一个for长度来获取字符串长度,然后再做一个来反转它?是否有其他方法来做 a reverse,或者这是基本的方法?

标签: c

解决方案


假设您不能使用函数来获取字符串长度并且您想保留第二个循环,恐怕这是最短的方法。

不过作为旁注:此代码不是很安全,因为for(int i=0; in[i] != '\0'; i++)您没有考虑传递给参数的参数in不是有效的C 字符串\0的情况,其中数组的所有元素中都没有一个,in并且 this代码最终会在第一次显示缓冲区过度读取for loop时,它将读取超出in边界,并在第二次显示缓冲区溢出for loop,您可以out. 在这样的函数中,您应该向调用者询问两个数组的长度,in并在访问它们时out将其用作最大索引。

正如 Rishikesh Raje 在评论中指出的那样:您还应该将第二个 for 循环中的退出条件i <= string_lengthto更改为,因为当它将通过负索引访问时,i < string_length它将生成另一个缓冲区过度读取。i == string_lengthout


推荐阅读