请高手用C语言写一段判断是否是回文的程序
问题的要求比较复杂要求写3个函数,main,strip,reversestrip函数的功能就是把你输入的东西变成标准形式(只包括小写字母或者数字),比如:输入Thequi...
问题的要求比较复杂
要求写3个函数,main, strip,reverse
strip函数的功能就是把你输入的东西变成标准形式(只包括小写字母或者数字),比如:输入The quick fox! 就转换为 thequickfox
reverse函数的空能就是把strip的输出结果颠倒,比如 hello would转换成 olleh
main函数的功能就是判断strip函数和reverse的输出结果是否相同,如果相同,比如:1234321则输出:是回文,否则输出:不是回文。
请高手指教!谢谢 展开
要求写3个函数,main, strip,reverse
strip函数的功能就是把你输入的东西变成标准形式(只包括小写字母或者数字),比如:输入The quick fox! 就转换为 thequickfox
reverse函数的空能就是把strip的输出结果颠倒,比如 hello would转换成 olleh
main函数的功能就是判断strip函数和reverse的输出结果是否相同,如果相同,比如:1234321则输出:是回文,否则输出:不是回文。
请高手指教!谢谢 展开
2个回答
展开全部
栈实现的
#include<stdio.h>
#include<stdlib.h>
#define MAXCHAR 40
struct node
{
char data;
struct node *next;
};
int ishs(struct node *head,int n)
{
char stack[MAXCHAR/2];
struct node *p = head;
int top = 0;
while(top<n/2) //前半部分元素入栈
{
stack[top] = p->data;
top++;
p = p->next;
}
if(n%2==1) //n为奇数
p = p->next;
top--;
while(top>=0 && p!=NULL && stack[top]==p->data) //边退栈边比较
{
top--;
p = p->next;
}
if(top==-1 && p==NULL) //栈空且链表比较完毕,是回文数
return 1;
else return 0;
}
void main(void)
{
char s[MAXCHAR];
struct node *head = NULL,*p,*q;
int i=0;
printf("输入一个数:");
scanf("%s",s);
while(s[i]!='\0') //建立字符串单链表
{
p = (struct node*)malloc(sizeof(struct node));
p->data = s[i];
p->next = NULL;
if(head==NULL)
{
head = p;
q = p; //q总指向最后一个结点
}
else
{
q->next = p;
q = p;
}
i++;
}
if(ishs(head,i))
printf("%s是回文数\n",s);
else
printf("%s不是回文数\n",s);
}
#include<stdio.h>
#include<stdlib.h>
#define MAXCHAR 40
struct node
{
char data;
struct node *next;
};
int ishs(struct node *head,int n)
{
char stack[MAXCHAR/2];
struct node *p = head;
int top = 0;
while(top<n/2) //前半部分元素入栈
{
stack[top] = p->data;
top++;
p = p->next;
}
if(n%2==1) //n为奇数
p = p->next;
top--;
while(top>=0 && p!=NULL && stack[top]==p->data) //边退栈边比较
{
top--;
p = p->next;
}
if(top==-1 && p==NULL) //栈空且链表比较完毕,是回文数
return 1;
else return 0;
}
void main(void)
{
char s[MAXCHAR];
struct node *head = NULL,*p,*q;
int i=0;
printf("输入一个数:");
scanf("%s",s);
while(s[i]!='\0') //建立字符串单链表
{
p = (struct node*)malloc(sizeof(struct node));
p->data = s[i];
p->next = NULL;
if(head==NULL)
{
head = p;
q = p; //q总指向最后一个结点
}
else
{
q->next = p;
q = p;
}
i++;
}
if(ishs(head,i))
printf("%s是回文数\n",s);
else
printf("%s不是回文数\n",s);
}
展开全部
栈实现的
#include<stdio.h>
#include<stdlib.h>
#define
MAXCHAR
40
struct
node
{
char
data;
struct
node
*next;
};
int
ishs(struct
node
*head,int
n)
{
char
stack[MAXCHAR/2];
struct
node
*p
=
head;
int
top
=
0;
while(top<n/2)
//前半部分元素入栈
{
stack[top]
=
p->data;
top++;
p
=
p->next;
}
if(n%2==1)
//n为奇数
p
=
p->next;
top--;
while(top>=0
&&
p!=NULL
&&
stack[top]==p->data)
//边退栈边比较
{
top--;
p
=
p->next;
}
if(top==-1
&&
p==NULL)
//栈空且链表比较完毕,是回文数
return
1;
else
return
0;
}
void
main(void)
{
char
s[MAXCHAR];
struct
node
*head
=
NULL,*p,*q;
int
i=0;
printf("输入一个数:");
scanf("%s",s);
while(s[i]!='\0')
//建立字符串单链表
{
p
=
(struct
node*)malloc(sizeof(struct
node));
p->data
=
s[i];
p->next
=
NULL;
if(head==NULL)
{
head
=
p;
q
=
p;
//q总指向最后一个结点
}
else
{
q->next
=
p;
q
=
p;
}
i++;
}
if(ishs(head,i))
printf("%s是回文数\n",s);
else
printf("%s不是回文数\n",s);
}
#include<stdio.h>
#include<stdlib.h>
#define
MAXCHAR
40
struct
node
{
char
data;
struct
node
*next;
};
int
ishs(struct
node
*head,int
n)
{
char
stack[MAXCHAR/2];
struct
node
*p
=
head;
int
top
=
0;
while(top<n/2)
//前半部分元素入栈
{
stack[top]
=
p->data;
top++;
p
=
p->next;
}
if(n%2==1)
//n为奇数
p
=
p->next;
top--;
while(top>=0
&&
p!=NULL
&&
stack[top]==p->data)
//边退栈边比较
{
top--;
p
=
p->next;
}
if(top==-1
&&
p==NULL)
//栈空且链表比较完毕,是回文数
return
1;
else
return
0;
}
void
main(void)
{
char
s[MAXCHAR];
struct
node
*head
=
NULL,*p,*q;
int
i=0;
printf("输入一个数:");
scanf("%s",s);
while(s[i]!='\0')
//建立字符串单链表
{
p
=
(struct
node*)malloc(sizeof(struct
node));
p->data
=
s[i];
p->next
=
NULL;
if(head==NULL)
{
head
=
p;
q
=
p;
//q总指向最后一个结点
}
else
{
q->next
=
p;
q
=
p;
}
i++;
}
if(ishs(head,i))
printf("%s是回文数\n",s);
else
printf("%s不是回文数\n",s);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询