编写反转字符串的程序,要求优化速度、优化空间。
思路 :
例如 str ="abcd"
长度是4 ,只需要进行a 与d b 与 c交换
声明两个指针,不开辟新的空间,指针p ,s
p = str ; //指向头
s= str+len-1;//指向尾节点
这样 p和 s交换
然后p++ ;s--
这样p 和s交换
这样就可以实现字符串翻转,且
空间最小,时间复杂度为只需n/2;
void main(){
char *str="abcd";
char *p,*s,tmp;
int i ,len;
len = strlen(str);
p = str;
s = str+len-1;
for(i = 0;i<(len/2);i++)
{
tmp = *p;
*p = *s;
*s = *tmp;
p++;
s--;
}
for(i = 0;i<len;i++)
{
cout<<str[i]<<endl;
}
}
- void Reverse(char *str)
- {
- if(str == NULL)
- {
- return;
- }
- int length = strlen(str);
- int i = 0;
- int j = length - 1;
- while(i < j)
- {
- char tmp = str[i];
- str[i] = str[j];
- str[j] = tmp;
- i++;
- j--;
- }
- }