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(" ");
    }

  • 相关阅读:
    conda创建、删除、重命名环境
    jupyter notebook选择conda环境
    conda 创建tensorflow虚拟环境后,无法import tensorflow在jupyter
    labelme2coco
    MacOs 10.14.3 Matlab2018b 解决“找不到已安装的编译器 'Xcode Clang++'。错误使用mex,未找到合适的编译器”问题
    MaskRCNN 奔跑自己的数据
    labelme2coco问题:TypeError: Object of type 'int64' is not JSON serializable
    kill 掉 占据端口的进程
    关于对多层嵌套的json字符串取目标值的问题
    关于Jmeter测试移动端应用时提示非法登录,不是合法的登录设备时的解决办法
  • 原文地址:https://www.cnblogs.com/heiming/p/5775890.html
Copyright © 2011-2022 走看看