c - 使用指针在c中反转字符串

标签 c string pointers reverse

我正在尝试使用指针反转字符串,但它似乎不起作用,有什么问题吗?输出是 olllo 但应该是 olleh

#include <stdio.h>   
#include <string.h>   
#include <stdlib.h>   


void reverse(char *cadena){

    size_t len = strlen(cadena);
    char *end= cadena;
    char *aux = cadena;
    while(*++end){}
    --end; //end points to a

    for(;len;--len){
        *aux++ = *end--;

    }

}

int main()
{

    char buffer[] = "hello";
    reverse(buffer);
    printf("%s",buffer);


    return 0;
}

最佳答案

行:

*aux++ = *end--;

交换任何东西。它只是将右侧的值赋给左侧。你总是会得到一个回文,由字符串的右半部分组成。对于交换逻辑,您应该这样做:

char tmp = *aux;
*aux = *end;
*end = tmp;

此外,您不应该真正遍历整个字符串。实际上,这意味着反转字符串,然后再次反转。只需在遍历 一半 字符串时应用交换逻辑,就可以开始了:

void reverse(char *cadena) {
    if(cadena != NULL){                                 // add some checks...    
        size_t len = strlen(cadena);
        char *end = cadena + (len > 1 ? len - 1 : 0);   // ...for safety    
        char *aux = cadena;

        for (len /= 2; len; --len) {
            char tmp = *aux;
            *aux++ = *end;
            *end-- = tmp;
        }
    }
}

关于c - 使用指针在c中反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51014507/

相关文章:

java - 我的国际象棋程序的线程 "main"java.lang.NullPointerException 中出现异常

使用 fwrite 复制文本文件,结果是垃圾? C

c - 通过 C 中的套接字与服务器的多个连接

c - 从linux内核的pid获取完整进程路径

python - 尝试创建函数以提取特殊字符之间的切片

c - 如何在c中用 '%30'替换字符串中的空格

c - malloc 函数在 C 中如何工作?

string - 为什么字符串不能被整数值索引

c++ - 如何在类中重新分配指针数组?

c - 使用列表存储 .txt 文件中的数据,仅存储最后一个输入 (C)