首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

【讨论】关于反转字符串的算法,该如何解决

2013-01-25 
【讨论】关于反转字符串的算法把一个字符串中的字符从头到尾反转过来,如12345反转成54321,常规的算法是

【讨论】关于反转字符串的算法
把一个字符串中的字符从头到尾反转过来,如"12345"反转成"54321",常规的算法是从头开始依次与尾部字符交换,直到达到中点的字符为止,如下所示:


char *Reverse(char *p_szBuf) {
    int len = strlen(p_szBuf);
    int nHalf = len / 2;

    for ( int i=0, j=len-1; i<nHalf; i++, j-- ) {
        char ch = p_szBuf[i];
        p_szBuf[i] = p_szBuf[j];
        p_szBuf[j] = ch;
    }

    return p_szBuf;
}

那么,从时间和空间两个角度考虑,有没有更高效的算法呢?
欢迎大家讨论(最好是算法本身,象ReverseString之类的现成函数就算了)
[解决办法]
似乎没别的法子。
问题太简单。想玩算法,应该再复杂些。

i和j,只用一个就够。减少了四个字节。不知道算不算更高效。嘿,,,
另据说,异或运算,就可对换两个变量。又可减少一个字节。
[解决办法]
引用:
把一个字符串中的字符从头到尾反转过来,如"12345"反转成"54321",常规的算法是从头开始依次与尾部字符交换,直到达到中点的字符为止,如下所示:
C/C++ code

char *Reverse(char *p_szBuf) {
    int len = strlen(p_szBuf);
    int nHalf = len / 2;

    for ( int i=0, j=l……

对于char *这是理论上最快的算法。

热点排行