C/C++ 字符串reverse总结

总结一下 字符串reverse的几种操作,包括C C++风格的:

一种思想是就地利用一个tmp首尾swap,char* 和String都一样
char*
void Reverse(char *word)   // 适合C风格字符串反转函数
{                          // 来源 C++ Primer Plus 第五章 forstr2.cpp -- reversing an array
    char temp;
    size_t i, j;
    for (j = 0, i = strlen(word) - 1; j < i; --i, ++j) {
        temp = word[i];
        word[i] = word[j];
        word[j] = temp;
    }
}


String

void Reverse(String& str)
{
	char tmp;
	int len=str.size();
	for(int i=0;i


还有一种比较相似,只是先copy一份原字符串,然后将copy后的尾覆盖掉源串的头,直至loop结束.这种效率比上面的低


另外还有一种效率据某博主测试最高的,直接调用系统的reverse函数,实质也是交换首尾字符。


void Reverse(String& str)
{
reverse(str.begin(),str.end());
// STL 反转函数 reverse() 的实现
    /*     template 
     *     void reverse(BidirectionalIterator first, BidirectionalIterator last)
     *     {
     *         while ((first != last) && (first != --last))
     *             swap(*first++, *last);
     *     }
     */
}


博主测试,调用系统的最快,另外我们还要考虑编码速度,所以写代码除了考虑代码执行效率,还有码农的效率,尤其是有时间限制的面试中。下次碰到我基本都会选最后一种了,char* 的也先转String,例如

char *a;
String str=a;

string转char*这么转,但是是const char*
char *a=str.c_str();

以上参考了博客 http://bbs.csdn.net/topics/360161087

你可能感兴趣的:(面试算法,数据结构,测试,string)