C语言判断一串字符是否为回文串

Python014

C语言判断一串字符是否为回文串,第1张

需要比较整个字符串然后得到结论输出yes而不是只判断了一个字符相等就输出

#include<stdio.h>

#include<string.h>

const int maxn=256

int main(){ int i char str[maxn] int len,b

  scanf("%s",str) len=strlen(str) //输入完了字符串再计算长度,不能在输入之前算

  for(i=0,b=1i<=len/2i++) 

    if(str[i]!=str[len-i-1]){ b=0 break } //如果发现不相等则判定不是回文

  if ( b!=0 ) printf("yes") else printf("no") //等循环完毕再得出结论

  return 0 //main前面有int修饰,因此必须返回整型值

}

不用那么麻烦,看看这种思路

一个字符串如果是回文,就是两端相对于中心位置对称

123321

123-对称点-321

12321

12---3(对称点)--21

只需要拿左边这半边的字符,与右边的比较,如果一样,就是回文

#include

#include

"string.h"

void

main()

{

int

x,i

char

st1[100]={0}

gets(st1)

x=strlen(st1)

for(i

=

0

i

<=

x/2

i++)///比到一半就不比了,原理已讲

{

if(st1[i]

!=

st1[x-i-1])///这就是比较两端的字符

{

break//不是回文

}

}

if(i>

x/2)///没执行break,就是回文

printf("YES")

else

printf("NO")

}

采用链栈实现算法,代码如下:

#include"stdio.h"

#include"stdlib.h"

typedef char ElemType

typedef struct stnode

{

ElemType data

struct stnode *next

}StNode, *LinkStack

int huiwen(char str[])

{

int i = 0

char ch

StNode *sl = NULL, *p

while ((ch = str[i++]) != '\0')

{

p = (StNode *)malloc(sizeof(StNode))

p->data = ch

p->next = sl

sl = p

}

i = 0

while (sl != NULL)

{

p = sl

ch = p->data

sl = sl->next

free(p)

if (ch != str[i++])

return 0

}

return 1

}

void main()

{

char string[20]

int hw

printf("input a string:")

gets_s(string)

hw = huiwen(string)

if (hw) printf("The string is HUIWEN.")

else printf("The string is not HUIWEN.")

}

扩展资料

栈的特点是先进后出,而链表中的头插法正好满足我们的需求,因为头插法后面插入的节点位于链表的开头,所以我们可以使用头插法来插入节点,在弹出节点的时候弹出链表的第一个节点即可,而第一个节点是很容易找出来的,所以可以很轻松地实现栈的压入和弹出操作。

栈是一种是一种实现数据“先进后出”的存储结构,分为静态栈和动态栈,静态栈就是以数组的方式存储数据,动态栈是以链表的方式存储数据;对栈的操作算法,常用的就是压栈和出。

栈的创建:

在创建一个数据结构之前,必须知道这种数据结构由哪些参数组成,栈的本质既然是个链表,它必然由很多节点组成;为了实现“先进后出”这种数据结构,我们需要引进两个参数,一个是栈顶指针(pTop),始终指向栈顶元素。一个参数是栈底指针(pBottom),始终指向栈底元素。

我们知道为了方便描述链表的各种操作,引进了头节点的概念,即为每个链表前面加一个头节点,但并存放有效数据;同样,为了实现栈的操作,我们同样需要一个不存放任何有效数据的节点,并且栈底指针始终指向该节点。