首先我们需要知道回文是什么呢?
回文,汉语词语,指汉语中的回文语法,即把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情况,叫做回文,也叫回环。
举个例子
如:日往则月来,月往则日来。 《易经·系辞》
其一:酡颜玉碗捧纤纤,乱点余花吐碧衫。
歌咽水云凝静院,梦惊松雪落空岩。
其二:
空花落尽酒倾缸,日上山融雪涨江。
红培浅瓯新火活,龙团小碾斗晴窗。
这是两首通体回文诗。又可倒读出下面两首,极为别致。
其三:
岩空落雪松惊梦,院静凝云水咽歌。
衫碧吐花余点乱,纤纤捧碗玉颜酡。
其四:
窗晴斗碾小团龙,活火新瓯浅焙红。
江涨雪融山上日,缸倾酒尽落花空。
下面我们就来尝试用C语言来判断一段字符是否符合这样的规律
首先我们清楚回文是前半段和后半段相同的
那么,我们可以将字符全部入队,通过从队首拿取元素,与队尾指针指向元素进行比较,每次比较后队尾指针向前移一位即可
下面我们具体看看如何操作
我们先写出主函数,再逐步补全
int main() {
char str[MAX_SIZE];
printf("请输入一个字符串:");
scanf("%s", str); // 使用 scanf 读取字符串
if (pdhw(str)) {
printf("%s 是回文。\n", str);
} else {
printf("%s 不是回文。\n", str);
}
return 0;
}
从其中我们可以看出需要函数“pdhw”
int pdhw(char* str) {
int l = strlen(str);
Queue queue;
initQueue(&queue); // 初始化队列
for (int i = 0; i < l; i++) {
enqueue(&queue, str[i]);
}
//字符串入队
// 将队首和队尾的元素依次比较
while (queue.front <= queue.rear) {
char frontChar = dequeue(&queue);
char rearChar = queue.data[queue.rear];
if (frontChar != rearChar) {
return 0; // 若不相等,则不是回文
}
queue.rear--; // 更新队尾指针
}
return 1; // 所有字符都相等,是回文
}
//判断是否是回文
最后我们看看所有函数补全后的代码
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];//最大容量为MAX——SIZE
int front;
int rear;
} Queue;
//定义队列结构
void initQueue(Queue* queue) {
queue->front = 0; // 队首指针为0
queue->rear = -1; // 队尾指针为-1
}
//创建一个队列
void enqueue(Queue* queue, char a) {
if (queue->rear == MAX_SIZE - 1) {
printf("队列已满,无法入队。\n");
return;
}
queue->data[++(queue->rear)] = a; // 将元素入队,并更新队尾指针 queue->rear先找到rear的位置,然后先自增再插入a,即入队
}
//入队
char dequeue(Queue* queue) {
if (queue->front > queue->rear) {
printf("队列为空,无法出队。\n");
return '\0';
}
return queue->data[(queue->front)++]; // 出队并返回出队的元素,同时更新队首指针
}
//元素出队
int pdhw(char* str) {
int l = strlen(str);
Queue queue;
initQueue(&queue); // 初始化队列
for (int i = 0; i < l; i++) {
enqueue(&queue, str[i]);
}
//字符串入队
// 将队首和队尾的元素依次比较
while (queue.front <= queue.rear) {
char frontChar = dequeue(&queue);
char rearChar = queue.data[queue.rear];
if (frontChar != rearChar) {
return 0; // 若不相等,则不是回文
}
queue.rear--; // 更新队尾指针
}
return 1; // 所有字符都相等,是回文
}
//判断是否是回文
int main() {
char str[MAX_SIZE];
printf("请输入一个字符串:");
scanf("%s", str); // 使用 scanf 读取字符串
if (pdhw(str)) {
printf("%s 是回文。\n", str);
} else {
printf("%s 不是回文。\n", str);
}
return 0;
}