一.简单的反转
要求不使用系统函数,不使用堆,且时间复杂度最小
#include <iostream>
using namespace std;
//字符串反转
char *strReverse(char *str){
// 判断字符是否为null或是空字符串
if (str == NULL || str == '\0') {
return str;
}
// 定义char数组指针
char *start = str;
char *end = str;
while (*end != '\0'){//指向最后一个结点
end++;
}
// 交换头和尾的值
char temp;
--end;// 去除\0的位置
while (start < end){
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
return str;
}
int main(void){
char str[] = "cangege";
cout << strReverse(str) << endl;// 输出egegnac
system("pause");
return 0;
}
二.扩展版反转
给出字符串数组,字符串由若干单词和空格组成,下边代码将数组中单词反转输出,输入“Welcome to Cangege Blog”输出为“Blog Cangege to Welcome”
代码思路为:1.定义两个指针,分别指向一个单词的开头和结尾地址
2.先整体反转
3.然后以空格为单词结束标志分别反转#include <iostream>
using namespace std;
// 扩展版反转
char * strReverseEx(char *str){
// 判断字符是否为null或是空字符串
if (str == NULL || str == '\0') {
return str;
}
// 先整体反转
strReverse(str);
// 定义char数组指针
char *start = str;
char *end = str;
while (true)
{ // 然后根据空格分单词反转
if (*end == ' ')
{
*end = '\0';
strReverse(start);
*end = ' ';
start = end+1;
}
// *end=='\0',说明到了字符串结尾
if (*end=='\0')
{
strReverse(start);
break;
}
end++;
}
return str;
}
int main(void){
char str[] = "Welcome to Cangege Blog";
cout << strReverseEx(str) << endl;// 输出Blog Cangege to Welcome
system("pause");
return 0;
}
参考链接:http://blog.csdn.net/u010187139/article/details/47208919