数据结构——回文串判断(C语言)

该博客介绍了如何使用C语言编写一个判断回文串的程序。文章详细讲解了回文串的定义,并通过示例代码说明了在比较字符串时避免出现错误的方法,即先移动指针再进行比较。此外,还提供了获取字符串长度的辅助函数,整个程序实现了从用户输入到回文串判断的完整流程。
摘要由CSDN通过智能技术生成
  • 回文串判断
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE   10010
#define ElemType int

void InitString(char s1[MAXSIZE]){
    scanf("%s",s1);
}
void CheckIsSyn(char  s1[MAXSIZE],int length){
    //此处判断需要注意
    //错误示例:
    //int i=0,j=length-1;
    //while(i<=(j-1)&&s1[i++]==s1[j--]);
    //错误原因:比如字符串ababcaba,在比较最后两个字符b和c的时候
    //此时b和c不相等,但是i和j在s1[i++]==s1[j--]处仍然执行了i++和j--
    //导致下面的判断是仍然满足回文串条件(执行之后i>j,满足判断条件),所以出错了
    //解决办法:先执行++i和--j(先移动下标,再进行判断)
    //例如对于字符串ababcaba,在比较最后两个字符b和c的时候
    //此时先分别移动i和j到b和c的位置,再判断,此时b和c不相等,退出循环
    //执行下面判断条件的时候i仍然j,不满足(i>=j)
    int i=-1,j=length;
    //如果相同则继续比较下一个字符
    while(s1[++i]==s1[--j]&&i<=(j-1));
    if(i>=j&&length>0)
        printf("该字符串是回文串\n");
    else
        printf("该字符串不是回文串\n");
}
int getLength(char  s1[MAXSIZE]){
    int length=0,index=0;
    while(s1[index++]!='\0'){
        length++;
    }
    return length;
}
int main(){
    char s1[MAXSIZE];
    printf("输入字符串:");
    InitString(s1);
    printf("存储字符串为:%s\n",s1);
    int length=0;
    length=getLength(s1);
    printf("字符串长度为:%d\n",length);
    printf("判断是否为回文串\n");
    CheckIsSyn(s1,length);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

C语言中,回文判断是一个常见的问题。回文是指正序和逆序读都相同的字符串或序列。下面是一种基于数据结构回文判断方法: 1. 使用栈:将字符串中的字符依次入栈,然后再依次出栈与原字符串进行比较。如果出栈的字符与原字符串中的字符相同,则继续比较下一个字符;如果不相同,则说明不是回文。如果所有字符都比较完且相同,则是回文C语言代码示例: ```c #include <stdio.h> #include <string.h> #define MAX_SIZE 100 // 栈结构定义 typedef struct { char data[MAX_SIZE]; int top; } Stack; // 初始化栈 void initStack(Stack *s) { s->top = -1; } // 入栈 void push(Stack *s, char c) { s->data[++(s->top)] = c; } // 出栈 char pop(Stack *s) { return s->data[(s->top)--]; } // 判断是否为回文 int isPalindrome(char *str) { int len = strlen(str); Stack s; initStack(&s); // 将字符串前一半字符入栈 for (int i = 0; i < len / 2; i++) { push(&s, str[i]); } // 比较栈中的字符与字符串后一半字符 int i = (len + 1) / 2; while (i < len) { if (pop(&s) != str[i]) { return 0; // 不是回文 i++; } return 1; // 是回文 } int main() { char str[MAX_SIZE]; printf("请输入一个:"); scanf("%s", str); if (isPalindrome(str)) { printf("%s 是回文\n", str); } else { printf("%s 不是回文\n", str); } return 0; } ``` --相关--: 1. 什么是回文? 2. 如何使用栈判断回文? 3. 还有其他的回文判断方法吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值