总结一下 字符串reverse的几种操作,包括C C++风格的:
一种思想是就地利用一个tmp首尾swap,char* 和String都一样
char*
String
还有一种比较相似,只是先copy一份原字符串,然后将copy后的尾覆盖掉源串的头,直至loop结束.这种效率比上面的低
另外还有一种效率据某博主测试最高的,直接调用系统的reverse函数,实质也是交换首尾字符。
博主测试,调用系统的最快,另外我们还要考虑编码速度,所以写代码除了考虑代码执行效率,还有码农的效率,尤其是有时间限制的面试中。下次碰到我基本都会选最后一种了,char* 的也先转String,例如
char *a;
String str=a;
string转char*这么转,但是是const char*
char *a=str.c_str();
以上参考了博客 http://bbs.csdn.net/topics/360161087
一种思想是就地利用一个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<len/2;i++)
{
//swap
tmp=str[i];
str[i]=str[len-1-i];
str[len-1-i]=tmp;
}
}
还有一种比较相似,只是先copy一份原字符串,然后将copy后的尾覆盖掉源串的头,直至loop结束.这种效率比上面的低
另外还有一种效率据某博主测试最高的,直接调用系统的reverse函数,实质也是交换首尾字符。
void Reverse(String& str)
{
reverse(str.begin(),str.end());
// STL 反转函数 reverse() 的实现
/* template <class BidirectionalIterator>
* 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