zoukankan      html  css  js  c++  java
  • 关于翻转字符串

    编程珠玑中的一个方法。

    移动字符串ABCD EFG  变为 EFG ABCD,可以看成是一个字符串的翻转问题。

    ABCD为 x, EFG为y, 翻转x后得到DCBA,翻转y后得到GFE,那么翻转DCBAGFE得到EFGABCD。

    另面试题:写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数。

    #include <stdio.h>

    int main()
    {
        char str[]="you are a student";
        printf(str);
        printf(" ");

        char *p,*q;
        char temp;
        p=q=str;
        while(*q!='')
        {
            q++;
        }
        q--;
        while(p<=q)
        {
            temp=*p;
            *p=*q;
            *q=temp;
            p++;
            q--;
        }//反转整个字符串

        printf(str);
        printf(" ");

        char *s;
        q=p=s=str;//指针指向开始位置
        while(*q!='')
        {
            if(*q==' '||*(q+1)=='')
            {
                p--;
                if(*(q+1)=='')//处理最后一个字串
                    p++;
                while(s<=p)
                {
                    temp=*p;
                    *p=*s;
                    *s=temp;
                    s++;
                    p--;
                }//反转局部字符串

                s=q+1;
                p=q;
            }
            q++;
            p++;
        }

        printf(str);
        printf(" ");
    }

    一、首先翻转整体,然后翻转局部,局部被翻转两次,又顺序回来。

    二、其实先翻转局部和先翻转整体是一样的。只要保证局部被翻转两次,就可以又得到顺序。

    如上代码将整体和局部翻转的代码换个位置,一样可以得到正确结果。

    #include <stdio.h>

    int main()
    {
        char str[]="you are a student";
        printf(str);
        printf(" ");

      

        char *s;
         char *p,*q;
        char temp;
        q=p=s=str;//指针指向开始位置
        while(*q!='')
        {
            if(*q==' '||*(q+1)=='')
            {
                p--;
                if(*(q+1)=='')//处理最后一个字串
                    p++;
                while(s<=p)
                {
                    temp=*p;
                    *p=*s;
                    *s=temp;
                    s++;
                    p--;
                }//反转局部字符串

                s=q+1;
                p=q;
            }
            q++;
            p++;
        }

        printf(str);
        printf(" ");
       
        p=q=str;
        while(*q!='')
        {
            q++;
        }
        q--;
        while(p<=q)
        {
            temp=*p;
            *p=*q;
            *q=temp;
            p++;
            q--;
        }//反转整个字符串

        printf(str);
        printf(" ");
    }

  • 相关阅读:
    2021秋 数分B1笔记
    android逆向奇技淫巧二十三:自己写app调用x音关键so(未完待续)(八)
    android逆向奇技淫巧二十二:ida栈回溯加密算法跟踪(未完待续)(七)
    http tcp websocket
    location.reload
    event.preventDefault
    document.querySelector
    造成播放端卡顿的原因
    引入外部组件 Vue.use()和Vue.component()
    Interpolation
  • 原文地址:https://www.cnblogs.com/heiming/p/5775890.html
Copyright © 2011-2022 走看看