• 关于翻转字符串


    编程珠玑中的一个方法。

    移动字符串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(" ");
    }

  • 相关阅读:
    创建分区表(按照年份分区,自动新增分区)
    flash rock me
    苹果有虫才好吃
    Evolutility改造支持oracle
    Nhibernate问题三则
    Html5+razor+jqmobile尝鲜
    配置Instantclient
    T4,Redmine,Nhibernate etc
    monotouch开发ios应用手记
    大文件及文件夹上传(续)
  • 原文地址:https://www.cnblogs.com/heiming/p/5775890.html
Copyright © 2020-2023  润新知