读书人

不好意思又来麻烦大家了链表有关问题

发布时间: 2013-01-06 15:44:47 作者: rapoo

不好意思又来麻烦大家了,链表问题
该链表我想 输入好几个个字符串然后判断他们是不是回文
前面没问题主要是函数 huiwen那帮我看看问题出在哪 谢谢了 感激不尽

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
int i,l;

void huiwen(char *a);
int main(void)
{
struct zhifu
{
int no;
char chuan[80];
char chuan2[80];
char huiwen;
struct zhifu *next;
};
struct zhifu *first = NULL;
struct zhifu *ing = NULL;
struct zhifu *ing2=NULL;
struct zhifu *previous = NULL;
char test='\0';
for(;;)
{
printf("\n你想继续输入字符数组吗(Y or N)?");
scanf("%c",&test);
if(tolower(test)=='n')
break;

ing=(struct zhifu*)malloc(sizeof(struct zhifu));

if(first==NULL)
first =ing;

if(previous!=NULL)
previous->next=ing;
printf("\n这是第几次定义字符数组:");
scanf("%d",&ing->no);
printf("\n请定义第%d次字符数组:",ing->no);
scanf("%s",ing->chuan);
getchar();
ing->next=NULL;
previous=ing;
fflush(stdin);
}

for (ing = first; ing != NULL; ing = ing->next) {
printf("%d: %s\n", ing->no, ing->chuan);
}

ing=first;
while(ing!=NULL)
{
char *p = ing->chuan;
char *q = ing->chuan2;

huiwen(q);

ing=ing->next;

}
printf("\nafter modified:\n");
for (ing = first; ing != NULL; ing = ing->next) {
printf("%d: %s\n", ing->no, ing->chuan2);
}
return 0;
}
void huiwen(char *a)
{
for(;*a;a++)
{
l=i;
if(*a!=*(a+l))
{printf("\n不是回文");break;}
else
l=l-1;
}
printf("\n如果前面没有说不是回文,那么该数组为回文");


}

[解决办法]
一个正读和反读都相同的字符序列称为“回文”。X例如“abcba”和“1221”是回文,而“abcde”不是回文。试写一个算法,利用栈的基本运算识别一个以@为结束符的字符序列是否是回文。
int Palindrome_Test(char str[ ])
/* 判别字符串str是否回文序列,是则返回1,否则返回0 */
{
InitStack(s); /*初始化栈s*/
for(i=0;str[i]!=’@’;i++)
Push(s,str[i]);
i=0;
while(!StackEmpty(s))
{
Pop(s,a);
if(a!=str[i++]) return 0;
}
return 1;
}


[解决办法]
调用huiwen函数 应该是huiwen(p)
这个是重写的回文方法,你可以参考下
void huiwen(char *a) 
{
printf("%s\n", a);


char *p1 = a;
char *p2 = (a+strlen(a)-1);
while(p1 < p2) {
if(*(p1++) != *(p2--)){
printf("NO\n");
break;
}
else
printf("yes\n");
}
}


[解决办法]
bool IsHuiWen(char *str)
{
if(str == NULL)
return false;
char *b = str;
char *e = str;
while(*e != '\0')
e++;
e--;
int ret = 0;
while(!ret = (*b++) - (*e--));
if(ret == 0)
return true;
else
return false;
}

读书人网 >C语言

热点推荐