字符串反序输出,实在搞不定了。

danielhf 2003-08-22 12:09:33
1,要求用函数解。 2,通过 char* Reverse(char*)的形式,传递返回字符指针。
3,解是用strcpy这样的函数,拷进来,然后反序赋给另一个数组,返回指针。
我就认为用指针直接可以解,结果被字符串结束符困住了。debug在函数内都正常,一返回变成乱码!VC6 在dev c++中无输出。 多谢了
#include <iostream>
#define size 5

using std::cout;
using std::cin;
using std::endl;

char* Reverse(char*);

int main()
{
char a[size];
int i=0;

cout<<"Enter a string: ";
for(; i<size; i++)
{ cin>>a[i]; }
a[i]='\0';        //非要这个,否则乱码

cout<<"The string you input is: "<<a<<endl;
cout<<endl;

  cout<<"The Reversed string is : "<<Reverse(a);<<endl;//返到这一行就乱
cout<<endl;

system("pause");
return 0;
}

char* Reverse(char* t)
{
char temp[size];

  t+=size-1;  //指向最后一个字符

for(int i=0; i<size; i++)
{ temp[i]=*t--; }
temp[i]='\0'; //没有这一行也是乱码

t=temp;  

return t;   //用DEBUG,一直到这里都是正常,但一返回。。
}

...全文
336 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
kof99 2003-08-22
  • 打赏
  • 举报
回复
t = temp; ?
这句有问题,temp[]退出函数时候就消失了才对

hellobcb 2003-08-22
  • 打赏
  • 举报
回复
反转字符串,c中有库函数啊!
#include <stdio.h>
main()
{
char *str="abcdefg";
strrev(str);
printf("After Tran: %s",str);
}
紫郢剑侠 2003-08-22
  • 打赏
  • 举报
回复
向与楼主一起学习...
danielhf 2003-08-22
  • 打赏
  • 举报
回复
多谢多谢,是我基本概念不清晰,所以总是差那么一点,运行不成功,各位的方法我都用过,就是那一步偏差,没有做出来。
谢谢oopig(面向对象的猪) Zark(金陵五月) ( Salam2001(高iQ的冰)给我很大帮助。

还有kof99(hongzhiyong)
simclock 2003-08-22
  • 打赏
  • 举报
回复
我觉得直接cin>>a就行啊
njtu 2003-08-22
  • 打赏
  • 举报
回复
oopig 的没问题。
sclzmbie 2003-08-22
  • 打赏
  • 举报
回复
nice
oopig 2003-08-22
  • 打赏
  • 举报
回复
(oopig的以上程序经过测试,欢迎合法使用(指不要输入NULL这样的非法数据),作者放弃所有版权)
oopig 2003-08-22
  • 打赏
  • 举报
回复
应该很容易吧,一个while循环就搞定了
char *Reverse(char *msg)
{
int len = ::strlen(msg);
char *head = msg;
char *tail = msg + len - 1;
while (head < tail)
{
char tmp = *head;
*head++ = *tail;
*tail-- = tmp;
}
return msg;
}
Zark 2003-08-22
  • 打赏
  • 举报
回复
错误原因-- "返回了局部变量,而且这个局部变量是一个指针,指向栈上的数据"

char* Reverse(char* src)
{
if(!src)
return NULL;

int nLen=strlen(src);
if(nLen<2)
return src;

for(int i=0;i<nLen/2;i++)
{
char c=src[i];
src[i]=src[nLen-i-1];
src[nLen-i-1]=c;
}
return src;
}

(以上程序未经测试,使用者后果自负,作者保留所有版权)
kof99 2003-08-22
  • 打赏
  • 举报
回复
没注意看题目,楼上是对的
wbh0360 2003-08-22
  • 打赏
  • 举报
回复
哎!你的temp是局部变量,函数一结素,它就释放了,
你返回t有什么用!!!!
Salam2001 2003-08-22
  • 打赏
  • 举报
回复
以下是在Dev-C++里通过的源代码:
#include<iostream>
#include<cstring>

using namespace std;

char* Reverse(char*);
const int size=5;

int main(int argc, char *argv[])
{
char a[size];
int i=0;

cout<<"Enter a string: ";

for(; i<size; i++)
cin>>a[i];
a[i]='\0'; //非要这个,否则乱码

//你想限制只输入5个字符可以用cin.getline(a,5)替换前面一大堆东西

cout<<"The string you input is: "<<a<<endl;
cout<<endl;
cout<<"The Reversed string is : "<<Reverse(a)<<endl;//返到这一行就乱
cout<<endl;

system("PAUSE");
return 0;
}

char* Reverse(char* t)
{
char temp[size];

t+=size-1;

int i; //注意在这里定义 i

for(i=0; i<size; i++)
temp[i]=*t--;

temp[i]='\0'; //这是必须的,不然就不是字符串而是字符数组了

strcpy(t,temp); //这就是往原来主函数中分配的内存复制反序字符串。

return t;
}
Salam2001 2003-08-22
  • 打赏
  • 举报
回复
还有那个i,是在for循环里定义的,出了循环就消失了啊!怎么还用吗?
应该在for前面定义i!
Salam2001 2003-08-22
  • 打赏
  • 举报
回复
题目是让你返回原来的t,现在这个t是已经被释放了的内存空间的地址。
还有,麻烦把那个Reverse(a)后面的分号去掉。
yellowwolf 2003-08-22
  • 打赏
  • 举报
回复
cin得到的是字符串,你把它改为getchar(a[i]);
循环次数为size - 1
kof99 2003-08-22
  • 打赏
  • 举报
回复
所以temp[]应该在主函数里定义
变成这样
Reverse(const char* t,char* temp)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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