字符串反转 c实现
2014-07-12 10:44
197 查看
昨天面试题中有一个关于字符串反转的,当时没实现,现在记录下:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
char *strrev(char * str){
int i,len;
char *ret;
ret = (char *)malloc(sizeof(str));
len = strlen(str);
for(i=0;i<len;i++){
*(ret+i) = *(str+len-1-i);
}
return ret;
}
int main(){
char str[]="dsf523321a";
printf("the rev str is :%s\n",strrev(str));
return 0;
}
但是一开始,我的写法
char *strrev(char * str){
int i,len;
char *ret = str;
len = strlen(str);
for(i=0;i<len;i++){
*(ret+i) = *(str+len-1-i);
}
return ret;
}
//双向copy,不使用动态内存分配,仅适用于数字
char * revstr(char * string){
char *start = string;
char *left = string;
char ch;
while (*string++) //置于字符串最后的位置
;
string -= 2;
while (left < string)
{
ch = *left; //swap元素
*left++ = *string; //按照从后向前的顺序将string中的字符copy到left
*string-- = ch; //由于copy的过程中,会覆盖left,实现双向copy
}
return(start);
}
于是输出的结果竟然是a12333321a,靠,怎么回事?原来在 char *ret = str 相当于我给一个字符串取了两个名,然后在进行*(ret+i) = *(str+len-1-i)这个操作的时候,就是出现使用了后半部分的字符覆盖了前半部分的字符,所以,必须动态再分配一个同样大小的空间,来进行反转和临时的存放,谨记,在每声明一个变量时,需要知道你为什么这么声明,具体在使用上需要注意的地方。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
char *strrev(char * str){
int i,len;
char *ret;
ret = (char *)malloc(sizeof(str));
len = strlen(str);
for(i=0;i<len;i++){
*(ret+i) = *(str+len-1-i);
}
return ret;
}
int main(){
char str[]="dsf523321a";
printf("the rev str is :%s\n",strrev(str));
return 0;
}
但是一开始,我的写法
char *strrev(char * str){
int i,len;
char *ret = str;
len = strlen(str);
for(i=0;i<len;i++){
*(ret+i) = *(str+len-1-i);
}
return ret;
}
//双向copy,不使用动态内存分配,仅适用于数字
char * revstr(char * string){
char *start = string;
char *left = string;
char ch;
while (*string++) //置于字符串最后的位置
;
string -= 2;
while (left < string)
{
ch = *left; //swap元素
*left++ = *string; //按照从后向前的顺序将string中的字符copy到left
*string-- = ch; //由于copy的过程中,会覆盖left,实现双向copy
}
return(start);
}
于是输出的结果竟然是a12333321a,靠,怎么回事?原来在 char *ret = str 相当于我给一个字符串取了两个名,然后在进行*(ret+i) = *(str+len-1-i)这个操作的时候,就是出现使用了后半部分的字符覆盖了前半部分的字符,所以,必须动态再分配一个同样大小的空间,来进行反转和临时的存放,谨记,在每声明一个变量时,需要知道你为什么这么声明,具体在使用上需要注意的地方。
相关文章推荐
- 实现字符串反转的四种方法(C#)
- 运用递归实现字符串反转
- Java字符串反转算法实现
- C语言实现字符串反转程序
- 用栈实现字符串反转输出
- 巧用Array对象来实现字符串的反转
- java实现字符串反转
- 实现字符串反转的函数[转]
- 实现字符串的反转[汇总]java
- 遇到一个面试题,用递归法实现字符串反转.
- 要求:不申请变量和空间反转字符串,用一个函数实现。VIA笔试题
- 不使用任何中间变量,实现字符串反转
- 使用C#实现字符串反转算法的参考答案
- 编写一个方法用于验证指定的字符串是否为反转字符,返回true和false。请用递归算法实现
- 递归实现字符串反转char* reverse(char* str)合集
- 如何实现字符串反转
- 关于一道面试题,使用C#实现字符串反转算法
- javascript 不用reverse实现字符串反转的代码
- 使用库函数gets和putchar实现字符串反转
- 使用SQL字符串反转函数REVERSE巧妙实现lastindexof功能