*q++

深圳大哥 2012-04-04 07:14:40
#include <iostream>
using namespace std;

char* ReverseWord(char* val);

int main()
{

cout<<ReverseWord("hello");
return 0;
}

char* ReverseWord(char* val)
{
int size=0;
char *q=val;

while(*q++ != '\0')
{
cout<<*q<<size+1<<endl;
size++;
}
q--;
char* str=new char(size+1);
char* p=str;
//char* str=new char(strlen(val)+1);
while(q >= val)
{
*p++=*--q;
}
*p='\0';

return str;

}

运行结果:
e1
l2
l3
o4
5
olleh

为什么会出现size=5,且此时的*q=' ',即空格呢
...全文
387 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
深圳大哥 2012-04-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

关于 字符串反转 在嵌入式中 的一个考点是:

两个字符交换的算法优化,我们可以完全不使用任何外部变量即完成两个字符(或者整数)的交换,这也是一个很经典的面试题目。特别是一些嵌入式硬件相关编程中经常要考虑寄存器的使用,因此经常有不使用任何第三个寄存器即完成两个寄存器数据的交换的题目。一般有两个解法,对应这里的解法三和解法四。

解法三的实现代码为:

C/C++ code
char……
[/Quote]

看来阁下是逆序之旅的作者啦
giant1st 2012-04-05
  • 打赏
  • 举报
回复
关于 字符串反转 在嵌入式中 的一个考点是

两个字符交换的算法优化,我们可以完全不使用任何外部变量即完成两个字符(或者整数)的交换,这也是一个很经典的面试题目。特别是一些嵌入式硬件相关编程中经常要考虑寄存器的使用,因此经常有不使用任何第三个寄存器即完成两个寄存器数据的交换的题目。一般有两个解法,对应这里的解法三和解法四。

解法三的实现代码为:

char* strrev3(const char* str)

{

char* tmp = new char[strlen(str) + 1];

strcpy(tmp,str);

char* ret = tmp;



char* p = tmp + strlen(str) - 1;



while (p > tmp)

{

*p ^= *tmp;

*tmp ^= *p;

*p ^= *tmp;



--p;

++tmp;

}



return ret;

}
深圳大哥 2012-04-04
  • 打赏
  • 举报
回复
圆括号确实是错误的
深圳大哥 2012-04-04
  • 打赏
  • 举报
回复
谢谢wohaaitinciu 的建议
shn521 2012-04-04
  • 打赏
  • 举报
回复
	while(*q!= '\0')
{
cout<<*q<<size+1<<endl;
q++;
size++;
}
summer_insects 2012-04-04
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

char *ReverseWord(char *val);

int main()
{
char *str = ReverseWord("hello"); // 用变量接收,因为你函数里面用到了new
cout << str << endl;
delete[] str; // 函数里面new的空间,从这里delete
return 0;
}

char *ReverseWord(char *val)
{
int size = 0;
char *q = val;

while (*q != '\0')
{
cout<< *q++ << size + 1 << endl; // 把while里面的++移到这里
size++;
}
q--;
char *str = new char[size + 1]; // 圆括号改方括号
char *p = str;

while (q >= val)
{
*p++ = *q--; // --改为后置
}
*p = '\0';

return str;
}

PS:个人习惯:*号紧靠标识符


运行结果:
h1
e2
l3
l4
o5
olleh
深圳大哥 2012-04-04
  • 打赏
  • 举报
回复
再次求解决啊
深圳大哥 2012-04-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

while(*q != '\0')
{
cout<<*qolor=#FF0000]++[/color]<<size+1<<endl;
size++;
}
换成这个吧
[/Quote]


这是啥东东,我怎么看不懂呢
再说与我的问题没有关系吧
kgzhw 2012-04-04
  • 打赏
  • 举报
回复
while(*q != '\0')
{
cout<<*qolor=#FF0000]++[/color]<<size+1<<endl;
size++;
}
换成这个吧
深圳大哥 2012-04-04
  • 打赏
  • 举报
回复
求解决啊

64,701

社区成员

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

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