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;
        }
    }
  • 相关阅读:
    localtime函数
    crontab命令加载和使用
    CentOS安装并查看lm_sensors CPU温度监控
    linux查看cpu核数和内存指令
    Unable to start debugging. Unexpected GDB output from command "-environment -cd xxx" No such file or
    EXCEL总结学习
    1.战前准备-字符的输入与输出
    10枚举,结构,联合
    C语言学习目录
    CAD的基础1
  • 原文地址:https://www.cnblogs.com/sooner/p/3179528.html
Copyright © 2011-2022 走看看