zoukankan      html  css  js  c++  java
  • Cracking the coding interview--Q1.2

    题目

    原文:

    Write code to reverse a C-Style String. (C-String means that “abcd” is represented as five characters, including the null character.)

    译文:

    写代码翻转一个C风格的字符串。(C风格的意思是"abcd"需要用5个字符来表示,包含末尾的 结束字符)

    解答

    这道题如果就是要考察你有没有注意到C风格字符串最后的那个结束符,那我觉得还是像书 上写的那样,在代码中有所体现。代码如下:

    void reverse(char *s)
    {
        char *end = s;
        char tmp;
        if(s)
        {
            while(*end)
                ++end;
            --end;
            while(s < end)
            {
                tmp = *s;
                *s++ = *end;
                *end-- = tmp;
            }
        }
    }

    否则的话,可以直接获取字符串的长度,然后从两头开始一一交换相应的字符。代码如下:

    void swap(char &a, char &b)
    {
        a = a^b;
        b = a^b;
        a = a^b;
    }
    
    void reverse2(char *s)
    {
        int n = strlen(s);
        for(int i=0; i < n/2; ++i)
            swap(s[i], s[n-i-1]);
    }

    完整代码如下:

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    void swap(char &a, char &b)
    {
        a = a^b;
        b = a^b;
        a = a^b;
    }
    
    void reverse2(char *s)
    {
        int n = strlen(s);
        for(int i=0; i < n/2; ++i)
            swap(s[i], s[n-i-1]);
    }
    
    void reverse(char *s)
    {
        char *end = s;
        char tmp;
        if(s)
        {
            while(*end)
                ++end;
            --end;
            while(s < end)
            {
                tmp = *s;
                *s++ = *end;
                *end-- = tmp;
            }
        }
    }
    int main()
    {
        char s[] = "1234567890";
        reverse2(s);
        cout << s << endl;
        return 0;
        
    }

     比较简答的一种方式:

    void reverse(char *s)
    {
        int n,tmp;
        while(s[n]!='')
            n++;
        for(int i=0;i<n/2;++i)
        {
             c=s[i];
             s[i]=s[n-i-1];
             s[n-i-1]=c;
        }
    }
  • 相关阅读:
    免费的编程中文书籍索引
    整理书签博客和文章
    【De8ug玩docker】-Docker常用命令操作
    Linux中的那些英文缩写和她的含义们
    Docker和DevOps是找工作必备技能
    【De8ug玩docker】-命令行只显示-bash-4.1#
    应该知道的Linux技巧
    阿里云服务器linux(centos)常用命令
    jQuery运维开发之第十七天
    js+dom开发第十六天
  • 原文地址:https://www.cnblogs.com/sooner/p/3179528.html
Copyright © 2011-2022 走看看