反转一个字符串而没有两个循环?

用户名

我想出了以下基本项目来反转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长度来获取字符串长度,然后再进行第二次操作来反转它呢?还有其他方法可以执行reverse,或者这是基本方法吗?

Andresantacruz

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试使用两个指针反转一个字符串

在一个字符串中获取两个或多个字符串

连接两个字符串,其中第一个字符串在末尾有一个空格

给定一个字符串,返回一个字符串,其中每个字符都是原始字符,有两个字符?

For 循环一个字符串

将两个字符串合并为一个字符串

在两个字符串之间替换一个字符串

将一个字符串拆分为两个字符串

如何根据第一个字符串有两个不同的响应?

将两个字符串中的每个字符串的所有第一个类似的字符放入另一个字符串中

比较两个字符串,一个字符串具有通配符

如何用另一个字符串的前两个字符替换一个字符串的前两个字符?

有没有一种有效的方法可以在两个字符串之间分割一个字符串?

如何使用循环创建一个新的字符串而另一个字符串中没有空格

用两个字符的间隔分割一个字符串

如果最多两个字符不同,则匹配一个字符串

如果两个字符串仅相差一个字符,则返回True

计算一个字符串中没有任何循环的单词数量

grep:如果另一个字符串没有出现,则计算一个字符串出现的次数

从一个或两个数字中去除一个字符串

反转字符串-输出跳过最后一个字符

反转字符串并删除第一个字符

代入一个字符串变量没有“+”操作符

IndexOf 找到一个字符串,但 -match 没有

从一个字符串中提取两个子字符串

获取两个字符串之间的字符串-第一个字符串以换行符结尾

如何检查一个字符串是否包含两个星号字符?

JS如何从两个特殊字符之间选择一个字符串?

在一个字符串中检测两个或多个相同的字符