不用开辟数据的临时空间,怎么完成字符串的逆转?
2014-05-05 09:34
375 查看
不用开辟数据的临时空间完成两个数据的交换,我们一般会想到两种方法:
1、a=a+b 由于a+b可能会溢出,所以一般不采用这种方法
b=a-b
a=a-b
2、a=a^b 一般使用异或的方式去交换两个数据,并且不用开辟临时空间
b=a^b
a=a^b
eg:不开辟临时空间,完成字符串的逆转
#include<stdio.h>
#include<string.h>
void reverse(char * str)
{
int len=strlen(str);
//printf("len is %d\n",len); is 10
int start=0,end=len-1;
while(start<end)
{
str[start]=str[start]^str[end];
str[end]=str[start]^str[end];
str[start]=str[start]^str[end];
++start;
--end;
}
}
int main()
{
char str[]="HelloWorld";
//printf("sizeof is %d\n",sizeof(str)); is 11
printf("orgin str is:\t%s\n",str);
reverse(str);
printf("The end str is:\t%s\n",str);
system("pause");
}
1、a=a+b 由于a+b可能会溢出,所以一般不采用这种方法
b=a-b
a=a-b
2、a=a^b 一般使用异或的方式去交换两个数据,并且不用开辟临时空间
b=a^b
a=a^b
eg:不开辟临时空间,完成字符串的逆转
#include<stdio.h>
#include<string.h>
void reverse(char * str)
{
int len=strlen(str);
//printf("len is %d\n",len); is 10
int start=0,end=len-1;
while(start<end)
{
str[start]=str[start]^str[end];
str[end]=str[start]^str[end];
str[start]=str[start]^str[end];
++start;
--end;
}
}
int main()
{
char str[]="HelloWorld";
//printf("sizeof is %d\n",sizeof(str)); is 11
printf("orgin str is:\t%s\n",str);
reverse(str);
printf("The end str is:\t%s\n",str);
system("pause");
}
相关文章推荐
- 不开辟用于交换数据的临时空间完成字符串的逆序
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 面试:不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 不开辟用于交换数据的临时空间,完成字符串的逆序
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序(在技术一轮面试中,有些面试官会这样问)
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 90. 1.不开辟用于交换数据的临时空间 2.字符串的逆序 3判断单链表中是否存在环
- REP与STOS串操作指令相结合使用怎么完成建立一组相同数据的字符串?
- 临时开辟一个存储空间以存放一个结构体数据 。
- 给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。例如:" i am a little boy.
- 管理表空间和数据文件——维护表空间——设置默认表空间和删除表空间和删除数据文件盒临时文件
- 利用临时数据表完成SQL语句输出并进行自动编号
- C++ vector容器 循环使用 完成数据清空,回收空间
- 【Oracle】恢复临时表空间数据文件
- 学生类封装 , (链表)插入排序成绩 无动态数组 ,动态开辟空间 以及静态函数,数据成员的使用
- 数据库尽量不用字符串存储非字符串数据