请教一下这个程序如何改?

猪大哥呀 2012-03-21 07:40:18
#include<iostream>
using namespace std;
typedef struct
{char data[10];
int top;
}sqstack;

void initstack(sqstack *&s)
{s=(sqstack *)malloc(sizeof(sqstack));
s->top=-1;
}

int push(sqstack *& s,char &e)
{if(s->top==9)
return 0;
s->top++;
s->data[s->top]=e;
return 1;
}
int pop(sqstack*&s,char e)
{if (s->top==-1)
return 0;
e=s->data[s->top];
s->top--;
return 1;
}

int huiwen(char str[])
{int i;
char e;
sqstack *st;
initstack(st);
for(i=0;str[i]!='\0';i++)
push(st,str[i]);
for(i=0;str[i]!='\0';i++)
{pop(st,e);
if(str[i]!=e)
return (0);
}
return(1);
}
int main()
{
char n,str[10];
for(int i=0;i<10;i++)
{cin>>n;
str[i]=n;
}
huiwen(str[10]);
return 0;
}


error C2664: 'huiwen' : cannot convert parameter 1 from 'char' to 'char []'
...全文
59 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
猪大哥呀 2012-03-22
  • 打赏
  • 举报
回复
多谢各位的帮助,特别是三楼的那位,我会按照你说的好好修改程序的,再次感谢
camel_lzd 2012-03-21
  • 打赏
  • 举报
回复
++
[Quote=引用 2 楼 lou0378 的回复:]
主函数中huiwen(str[10]);这一句调用错误,huiwen()的参数是指针,你传递的是字符,
修改为:

huiwen(str);
[/Quote]
huameili 2012-03-21
  • 打赏
  • 举报
回复
你的代码问题很多,看你的意思是要判断一串长度小于9的串是否是回文串,主要有以下问题:
1:int push(sqstack *& s,char &e)这个函数压栈操作不用引用,直接传地址就可以
2:int pop(sqstack*&s,char e)出栈同理
3:int huiwen(char str[])数组名做形参,这原则上没有问题,但在实际编译时是转换为一个指针变量处理,调用的时候应当也要传一个指针进去,你的调用传递的不是一个地址,记住:str[10]!=str[],前者是变量,后者是指针。
4:其实回文串判定不必写这么复杂,还用到了栈。直接对比就行了,空间和时间复杂度都降下来了。
5:注意你的程序,push pop操作返回都应当是一个Bool值
6:你的main函数中在输入时并没有字符串结束标志“\0”可以改为我程序中的做法,或者你自己加上去。
////////////////
下面是修改后的程序,希望对你有用
///////////////////////
#include<iostream>
using namespace std;
typedef struct
{
char data[10];
int top;
}sqstack;

void initstack(sqstack* &s)
{
s=(sqstack *)malloc(sizeof(sqstack));
s->top=-1;
}

bool push(sqstack *s,char e)
{
if(s->top==9)
return 0;
s->top++;
s->data[s->top]=e;
return 1;
}
bool pop(sqstack*s,char &e)
{
if (s->top==-1)
return 0;
e=s->data[s->top];
s->top--;
return 1;
}

bool huiwen(char* str)
{
int i;
char e;
sqstack *st;
initstack(st);
for(i=0;str[i]!='\0';i++)
{
if(!push(st,str[i]))
{
cout<<"stack erro\n";
return false;
}
}
for(i=0;str[i]!='\0';i++)
{
if(!pop(st,e))
{
cout<<"stack erro\n";
return false;
}
if(str[i]!=e)
return 0;
}
free(st);
return 1;
}
int main()
{
char n,str[10];
cin>>str;
if(huiwen(str))
{
cout<<"Yes\n";
}
else
{
cout<<"No\n";
}
system("pause");
return 0;
}
  • 打赏
  • 举报
回复
主函数中huiwen(str[10]);这一句调用错误,huiwen()的参数是指针,你传递的是字符,
修改为:

huiwen(str);

qixing1115 2012-03-21
  • 打赏
  • 举报
回复
str[i]=n;
}
huiwen(str[10]);
return 0;
}
改为:
str[i]=n;
}
huiwen(str);
return 0;
}

64,641

社区成员

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

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