c++字符串倒序

ghlhy0505 2013-05-07 03:02:13
int main()
29 {
30
31 char src[]="hello,world";
32 char* dest=NULL;
33 int len=strlen(src);
34 dest=(char*)malloc(len);
35 char* d=dest;
36 char* s=src+len;
37 while(len--!=0)
38 {
39 d++=s--;//不可以这样给指针赋值吗?d是const类型的?
40 }
52 return 1;
53 }
...全文
195 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
云斜月 2013-05-07
  • 打赏
  • 举报
回复
*d,和*s才是取内容的,
starytx 2013-05-07
  • 打赏
  • 举报
回复
引用 7 楼 ghlzs 的回复:
[quote=引用 2 楼 turingo 的回复:] 基础的问题不少:

/* 包含所需要用到的库是个好习惯 */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(void)
{
	char src[] = "hello,world";
	int len = strlen(src);
	/* 注意的是dest加上结束符,需要分配len + 1大小的空间 */
	char* dest = (char*)malloc(len + 1);

	if(dest == NULL) return -1;
	
	char* d = dest;
	/* 最后一个字符是指向src + len - 1 */
	char* s = (char*)(src + len - 1);
	while(len-- != 0)
	{
		/* 拷贝字符应该用*d=*s这样的方式 */
		*d++ = *s--;
	}
	*d = '\0';

	printf("%s\n", dest);

	free(dest);
	return 0;
} 
[quote=引用 楼主 ghlzs 的回复:] int main() 29 { 30 31 char src[]="hello,world"; 32 char* dest=NULL; 33 int len=strlen(src); 34 dest=(char*)malloc(len); 35 char* d=dest; 36 char* s=src+len; 37 while(len--!=0) 38 { 39 d++=s--;//不可以这样给指针赋值吗?d是const类型的? 40 } 52 return 1; 53 }
[/quote] 请问我这样写d++=s-- 编译报错的原因是什么呢?[/quote]因为d是一个左值,而d++不是,具体看这个链接 http://zhidao.baidu.com/question/444723730.html
ghlhy0505 2013-05-07
  • 打赏
  • 举报
回复
引用 2 楼 turingo 的回复:
基础的问题不少:

/* 包含所需要用到的库是个好习惯 */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(void)
{
	char src[] = "hello,world";
	int len = strlen(src);
	/* 注意的是dest加上结束符,需要分配len + 1大小的空间 */
	char* dest = (char*)malloc(len + 1);

	if(dest == NULL) return -1;
	
	char* d = dest;
	/* 最后一个字符是指向src + len - 1 */
	char* s = (char*)(src + len - 1);
	while(len-- != 0)
	{
		/* 拷贝字符应该用*d=*s这样的方式 */
		*d++ = *s--;
	}
	*d = '\0';

	printf("%s\n", dest);

	free(dest);
	return 0;
} 
[quote=引用 楼主 ghlzs 的回复:] int main() 29 { 30 31 char src[]="hello,world"; 32 char* dest=NULL; 33 int len=strlen(src); 34 dest=(char*)malloc(len); 35 char* d=dest; 36 char* s=src+len; 37 while(len--!=0) 38 { 39 d++=s--;//不可以这样给指针赋值吗?d是const类型的? 40 } 52 return 1; 53 }
[/quote] 请问我这样写d++=s-- 编译报错的原因是什么呢?
ghlhy0505 2013-05-07
  • 打赏
  • 举报
回复
引用 5 楼 ghlzs 的回复:
[quote=引用 1 楼 jiweijian123 的回复:] 分成2句话。
d=s--;
d++
就可以了,保持一个好的书写习惯。
对,这样写编译不报错了,但是我输出count<<dest 时怎么是空的呢?printf("%s\n",dest)也不好使,为什么呢? [/quote] 没刷新,没看见楼上几位的解释,问题解决了多谢
ghlhy0505 2013-05-07
  • 打赏
  • 举报
回复
引用 1 楼 jiweijian123 的回复:
分成2句话。
d=s--;
d++
就可以了,保持一个好的书写习惯。
对,这样写编译不报错了,但是我输出count<<dest 时怎么是空的呢?printf("%s\n",dest)也不好使,为什么呢?
starytx 2013-05-07
  • 打赏
  • 举报
回复
char* s=src+len-1; // -1才是最后一个有效字符的位置 dest=(char*)malloc(len+1); // 预留1个结束符的空间 *d++=*s--; //不可以这样给指针赋值吗?d是const类型的? // 你是在改变指针指向的字符的值,不光是指针本身,这样的意思就是先把s指向的字符赋给d指向的字符,然后让d指向下一个位置,让s指向前一个位置
就是那个党伟 2013-05-07
  • 打赏
  • 举报
回复
*d++ = *s--; 这是关键问题 你那个把一个地址赋值给另一个地址的意思了
图灵狗 2013-05-07
  • 打赏
  • 举报
回复
基础的问题不少:

/* 包含所需要用到的库是个好习惯 */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(void)
{
	char src[] = "hello,world";
	int len = strlen(src);
	/* 注意的是dest加上结束符,需要分配len + 1大小的空间 */
	char* dest = (char*)malloc(len + 1);

	if(dest == NULL) return -1;
	
	char* d = dest;
	/* 最后一个字符是指向src + len - 1 */
	char* s = (char*)(src + len - 1);
	while(len-- != 0)
	{
		/* 拷贝字符应该用*d=*s这样的方式 */
		*d++ = *s--;
	}
	*d = '\0';

	printf("%s\n", dest);

	free(dest);
	return 0;
} 
引用 楼主 ghlzs 的回复:
int main() 29 { 30 31 char src[]="hello,world"; 32 char* dest=NULL; 33 int len=strlen(src); 34 dest=(char*)malloc(len); 35 char* d=dest; 36 char* s=src+len; 37 while(len--!=0) 38 { 39 d++=s--;//不可以这样给指针赋值吗?d是const类型的? 40 } 52 return 1; 53 }
折翼断JJ 2013-05-07
  • 打赏
  • 举报
回复
分成2句话。
d=s--;
d++
就可以了,保持一个好的书写习惯。

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧