赞
踩
判断字符串是否是回文通过把一半的字符串输入栈,再通过出栈一一与另一半对比,如果相等就继续,直到最后发现都能一一对应,则说明是回文
include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char items[MAX_SIZE];
int top;
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
void push(Stack *s, char c) {
s->items[++(s->top)] = c;
}
char pop(Stack *s) {
return s->items[(s->top)--];
}
int main() {
Stack s;
char str[MAX_SIZE];
int i, len, mid;
int isPalindrome = 1;
initStack(&s);
printf("Enter a string: ");
scanf("%s", str);
len = strlen(str);
mid = (len -1) / 2;//因为索引从0开始
for (i = 0; i <= mid; i++)
{
push(&s, str[i]);
}
for (i = (len % 2 == 0) ? mid+1 : mid;i < len;i++)//如果是奇数,就是mid
{
if (str[i] != pop(&s)) {
isPalindrome = 0; // Not a palindrome
break;
}
}
if (isPalindrome) {
printf("The string is a palindrome.\n");
} else {
printf("The string is not a palindrome.\n");
}
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。