美文网首页
1. 字符串逆序问题

1. 字符串逆序问题

作者: 郑行_aover | 来源:发表于2019-05-10 15:29 被阅读0次

    今天听同事说到字符串逆序的问题,所以也就自己写了一下。蛮有意思,

    方法一:正常解法

    思路

    • 采用两个指针,一个指针指向字符串起始位置,一个指针指向字符串结束位置。
    • 两个指针向中间移动,数据交换采用经典的临时变量交换法。
    //字符串反转
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <assert.h>
    char* inverse(char* str)
    {
        char*   p1 = str;
        char*   p2 = &str[strlen(str)-1];;
        char    t;
        int     len = strlen(str);
        assert(str);
        while(p1 != p2)
        {
                printf("======[%c]==[%c]=====\n",*p1,*p2 );
                t = *p2;
                *p2 = *p1;
                *p1 = t;
                p1++;
                p2--;
        }
        return str;
    }
    
    
    void main()
    {
        #define cmd "hello world"
        char* tmp = NULL;
        char* test = malloc(strlen(cmd));
        memcpy(test,cmd,strlen(cmd));
        tmp = inverse(test);
        free(test);
        printf("%s\n",tmp );
    }
    
    

    需要注意的地方:

    tmp = inverse(test); 
    

    test不能为字符串常量,如果写成如下形式,则会造成 程序crash掉。

    char* test = "hello world";
    tmp = inverse(test);
    

    方法二: 递归栈解法

    思路:

    递归栈解法,是一种比较巧妙的解法,不停的入栈,直到字符串结束,在出栈的过程中,将栈上的数据存储到变量里。

    #include <assert.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    void inverse_stack(char *str1,char *buf)
    {
        assert((str1!=NULL) && (buf != NULL));
        if (*str1 == '\0')  //递归结束的正常条件
            return;
        inverse_stack(str1 + 1,buf);
        strncat(buf, str1, 1);
    }
    int  main(void)
    {
        char test[] = "hello stack";   //buf[] 会在张栈上对全局区的字符串拷贝。
        char result[128] = {0};
        inverse_stack(test,result);
        printf("===%s====\r\n", result);
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:1. 字符串逆序问题

          本文链接:https://www.haomeiwen.com/subject/tfeaoqtx.html