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;
        }
    }
  • 相关阅读:
    window常见事件onload
    BOM顶级对象window
    模拟京东快递单号查询案例
    [Hibernate] one-to-one
    Katy Perry
    [Java] int 转换为BigDecimal
    [easyUI] datagrid 数据格 可以进行分页
    [easyUI] 树形菜单 tree
    [easyUI] lazyload 懒加载
    [easyUI] autocomplete 简单自动完成以及ajax从服务器端完成
  • 原文地址:https://www.cnblogs.com/sooner/p/3179528.html
Copyright © 2011-2022 走看看