----------------------✨🎉🎈==!!!热烈欢迎各位大佬!!!==🎈🎉✨---------------------
--------------------------------------------------------------------------🍻==专栏回顾==🍻-------------------------------------------------------------------------------
1.思路分析💡:
- 接收用户输入的字符串
- 循环将字符串中的字符逐个入栈
- 循环将字符逐个出栈,并且将出栈结果保存到一个字符数组中
- 利用strcmp()函数比较两个字符串是否相等,相等说明是回文,否则不是回文
2.代码实现💎:
# include <stdio.h>
# include <string.h>
# include <malloc.h>
//定义栈结构体
struct Stack {
char * top;//栈顶指针
char * base;//栈底指针
int size;//栈大小
};
//初始化栈
void initStack(struct Stack * stack) {
stack->size = 30;//定义栈的大小
stack->base = (char *)malloc(sizeof(char)*(stack->size));//将栈底指针指向系统分配的连续内存的首地址
stack->top = stack->base;//将栈顶指针也指向分配内存的首地址
}
//入栈
void push(struct Stack * stack,char input2) {
*(stack->top)= input2;//将数据n输入到栈顶指针所指向的内存中
stack->top++; //将栈顶指针在连续的内存中向下移动一位 (内存编号时从小到大的,向下移动一位就是指下一个内存单元)
}
//出栈
void pop(struct Stack * stack,char * output,int j) {
stack->top--;//栈顶指针在内存中向上移动一位
output[j]=*(stack->top);//将这个出栈的字符赋给输出的字符数组中对应的位置
}
//判断是否是回文的函数
void isSymmetrical(struct Stack * stack,char* input) {
int i = 0;//控制循环入栈
int j = 0;//控制循环出栈,同时当作出栈字符数组的下标
char input2;//记录入栈元素
char output[30];//定义出栈元素的字符数组
initStack(stack);//创建一个空栈
//循环入栈
while(input[i]!='\0') {//条件是当遇到字符'\0'时终止入栈,因为C中字符串结束的标志是'\0'
input2 = input[i];//将此次入栈的元素赋给input2,以便传递
push(stack,input2);//调用入栈函数
i++;
}
//循环出栈,并且将每次的出栈结果保存到字符数组中
while(input[j]!='\0'){//因为入了几次栈就出几次栈,所以条件和入栈一样,但是得定义一个新的变量j,因为i在入栈循环后值已经改变
pop(stack,output,j);//调用出栈函数
j++;
}
//使用strcmp()函数比较两个字符串(用户输入的字符串和出栈得到的字符串)是否相等
if(strcmp(input,output)==0){
printf("该字符串是回文\n");
}else{
printf("该字符串不是回文\n");
}
}
int main(void) {
int option;//用户操作
int loop=1;//变量loop控制循环
char input[30];//定义一个字符数组大小
struct Stack stack;//创建一个栈对象
//初始化
do {
//界面
printf("1.判断字符串是否为回文\n");
printf("2.退出系统\n");
printf("请输入你的操作:\n");
scanf("%d",&option);
switch(option) {
case 1://进制转换
printf("请输入你要判断的字符串:\n");
scanf("%s",&input);
isSymmetrical(&stack,input);//调用此函数判断是否是回文 symmetrical:对称的
break;
case 2://退出系统
loop=0;
printf("你退出了系统......\n");
}
printf("\n\n");//每次执行完换两行,对用户视觉友好
} while(loop);//循环条件为loop
}