结合C语言和算法学习:回文检测的多种方法

   2024-10-20 2870
核心提示:方法一:利用数组和循环比较#include stdio.h#include string.hint isPalindrome(char *str) {int len = strlen(str);for (int i

方法一:利用数组和循环比较

#include <stdio.h>#include <string.h>int isPalindrome(char *str) {    int len = strlen(str);    for (int i = 0; i < len / 2; i++) {        if (str[i] != str[len - i - 1]) {            return 0;        }    }    return 1;}int main() {    char str[100];    printf("请输入一个字符串:");    scanf("%s", str);    if (isPalindrome(str)) {        printf("%s 是回文字符串\n", str);    } else {        printf("%s 不是回文字符串\n", str);    }    return 0;}
方法二:利用栈的特性
#include <stdio.h>#include <string.h>#define MAX_SIZE 100typedef 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]);    }    for (int i = len / 2 + len % 2; i < len; i++) {        if (str[i] != pop(&s)) {            return 0;        }    }    return 1;}int main() {    char str[100];    printf("请输入一个字符串:");    scanf("%s", str);    if (isPalindrome(str)) {        printf("%s 是回文字符串\n", str);    } else {        printf("%s 不是回文字符串\n", str);    }    return 0;}
方法三:利用递归实现
#include <stdio.h>#include <string.h>int isPalindromeRec(char *str, int start, int end) {    if (start >= end) {        return 1;    }    if (str[start] != str[end]) {        return 0;    }    return isPalindromeRec(str, start + 1, end - 1);}int isPalindrome(char *str) {    int len = strlen(str);    return isPalindromeRec(str, 0, len - 1);}int main() {    char str[100];    printf("请输入一个字符串:");    scanf("%s", str);    if (isPalindrome(str)) {        printf("%s 是回文字符串\n", str);    } else {        printf("%s 不是回文字符串\n", str);    }    return 0;}

 
举报打赏
 
更多>同类网点查询
推荐图文
推荐网点查询
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号