读书人

一个字符串倒序的有关问题

发布时间: 2012-03-03 15:33:03 作者: rapoo

一个字符串倒序的问题
#include <stdio.h>
各位大哥帮忙看看哈.
这段代码有哪几个错误?
说明下原因嘛!
哎~~~~~ 基础不好.
int main()
{
char*src= "hello,world ";
char* dest=NULL;
int len=strlen(src);
dest=(char*)malloc(len);

char* d=dest;
char* s=src[len];
while(len--!=0)
d++ = s--;
printf( "%s\n ",dest);
return 0;
}

[解决办法]
int main()
{
char*src= "hello,world ";
char* dest=NULL;
int len=strlen(src);
// dest=(char*)malloc(len);
dest = (char *)malloc(len+1) // 字符串后面必须要有 '\0 '

char* d=dest;
// char* s=src[len];
char *s = &src[len-1]; // 最后一个字符是在src[len-1],取地址
while(len--!=0)
// d++ = s--;
*d++ = *s--; // 需要递引用,否则就是指针赋值啦
printf( "%s\n ",dest);
return 0;
}
[解决办法]
随手写一个:

char * res(char *str)
{
char tp;
char *re=str;
char *pb=str;
char *pe=str+strlen(str)-1;
while(pe> pb)
{
tp=*pe;
*pe--=*tb;
*pb++=tp;
}
return re;
}
不过似乎除了没有申请空间外, 没有什么别的优点,
[解决办法]
gfxiang(afu) 讲得很明白了,楼主应该知道错在哪了吧 ?
再改一个地方就完美了dest[len] = '\0 '; // 这句也不能忘记了。
改成这样:*dest = '\0 '; // 这句也不能忘记了
[解决办法]
void reverse_str(char *p)
{
if (*p == '\0 ')
return;
else
reverse_str(p + 1);
printf ( "%c ", *p);
}

[解决办法]
MS de
char * strrev (char * string)
{
char *start = string;
char *left = string;
char ch;

while (*string++)
;
string -= 2;

while (left < string)
{
ch = *left;
*left++ = *string;
*string-- = ch;
}

return(start);
}

读书人网 >C语言

热点推荐