利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Right”,否则输出“Wrong”。
时间: 2024-04-29 18:26:11 浏览: 83
好的,我了解了您的问题。下面是利用栈的基本操作对给定的字符串判断其是否是回文的代码:
```
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
string str;
cin >> str;
stack<char> stk;
int len = str.length();
for (int i = 0; i < len / 2; ++i) {
stk.push(str[i]);
}
for (int i = len / 2; i < len; ++i) {
if (str[i] != stk.top()) {
cout << "Wrong" << endl;
return 0;
}
stk.pop();
}
cout << "Right" << endl;
return 0;
}
```
以上代码中,我们首先将字符串的前半部分入栈,然后遍历字符串的后半部分。在遍历的过程中,如果发现当前字符与栈顶元素不一致,则说明该字符串不是回文,否则将栈顶元素出栈,继续遍历下一个字符。如果遍历完成后栈为空,则说明该字符串是回文,否则不是回文。
相关问题
用c语言实现利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Right”,否则输出“Wrong”。
可以使用栈的特性:后进先出(LIFO,Last In First Out)来判断字符串是否是回文。具体流程如下:
1. 定义栈结构体,用于保存已入栈的字符。
2. 遍历字符串,将每个字符依次入栈。
3. 遍历字符串,将每个字符与栈顶元素进行比较,如果相同则出栈,继续比较下一个字符。
4. 如果字符串遍历完毕,栈也为空,则该字符串是回文,输出“Right”。
5. 如果字符串遍历完毕,栈不为空,则该字符串不是回文,输出“Wrong”。
C语言实现代码如下:
```c
#include<stdio.h>
#include<string.h>
#define MAX_SIZE 100 // 定义栈最大容量
typedef struct Stack {
char data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1; // 空栈的 top 为 -1
}
// 入栈
int push(Stack *s, char c) {
if(s->top == MAX_SIZE - 1) {
return 0; // 栈满,入栈失败
}
s->top++;
s->data[s->top] = c;
return 1; // 入栈成功
}
// 出栈
int pop(Stack *s) {
if(s->top == -1) {
return 0; // 栈空,出栈失败
}
s->top--;
return 1; // 出栈成功
}
// 获取栈顶元素
char getTop(Stack *s) {
if(s->top == -1) {
return '\0'; // 空栈
}
return s->data[s->top];
}
int main() {
char str[MAX_SIZE];
printf("请输入字符串:");
scanf("%s", str);
int len = strlen(str);
Stack s;
init(&s);
for(int i = 0; i < len; i++) {
push(&s, str[i]);
}
for(int i = 0; i < len; i++) {
if(str[i] != getTop(&s)) {
printf("Wrong\n");
return 0;
}
pop(&s);
}
printf("Right\n");
return 0;
}
```
注意:为了方便起见,我们假设输入的字符串长度不超过 100。如果要处理更长的字符串,需要使用动态分配内存的方式来定义字符数组。
用c语言完成这两个功能(1)利用栈的基本操作将一个十进制的正整数转换成R进制数据,并将其转换结果输出。(2) 利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Right”,否则输出“Wrong”。
您好,关于您的问题,我可以为您提供一些代码示例:
(1) 将一个十进制的正整数转换成R进制数据:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100 // 栈的最大容量
typedef struct { // 栈的结构体定义
int top; // 栈顶指针
int data[MAX_STACK_SIZE]; // 存储数据的数组
} Stack;
void initStack(Stack* s) { // 初始化栈
s->top = -1;
}
int isFull(Stack* s) { // 判断栈是否已满
return s->top >= MAX_STACK_SIZE - 1;
}
int isEmpty(Stack* s) { // 判断栈是否为空
return s->top < 0;
}
void push(Stack* s, int x) { // 将元素入栈
if (isFull(s)) {
printf("Error: stack overflow!\n");
exit(-1);
}
s->data[++s->top] = x;
}
int pop(Stack* s) { // 将栈顶元素出栈
if (isEmpty(s)) {
printf("Error: stack underflow!\n");
exit(-1);
}
return s->data[s->top--];
}
void trans(int n, int r) { // 将十进制正整数n转换成r进制数
Stack s;
initStack(&s);
while (n > 0) { // 不断地将n对r取余数,并将余数入栈
push(&s, n % r);
n /= r;
}
while (!isEmpty(&s)) { // 将栈中的元素一次弹出,输出即可得到转换结果
printf("%d", pop(&s));
}
printf("\n");
}
int main() {
int n, r; // n是十进制正整数,r是目标进制
printf("Please input a positive integer and its target radix:\n");
scanf("%d%d", &n, &r);
printf("The result is:\n");
trans(n, r);
return 0;
}
```
(2) 判断一个字符串是否为回文串:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100 // 栈的最大容量
typedef struct { // 栈的结构体定义
int top; // 栈顶指针
char data[MAX_STACK_SIZE]; // 存储数据的数组
} Stack;
void initStack(Stack* s) { // 初始化栈
s->top = -1;
}
int isFull(Stack* s) { // 判断栈是否已满
return s->top >= MAX_STACK_SIZE - 1;
}
int isEmpty(Stack* s) { // 判断栈是否为空
return s->top < 0;
}
void push(Stack* s, char x) { // 将元素入栈
if (isFull(s)) {
printf("Error: stack overflow!\n");
exit(-1);
}
s->data[++s->top] = x;
}
char pop(Stack* s) { // 将栈顶元素出栈
if (isEmpty(s)) {
printf("Error: stack underflow!\n");
exit(-1);
}
return s->data[s->top--];
}
int isPalindrome(char* str) { // 判断一个字符串是否为回文串
Stack s;
initStack(&s);
int len = strlen(str);
for (int i = 0; i < len / 2; i++) { // 将字符串前一半字符入栈
push(&s, str[i]);
}
int j = len - len / 2; // j指向字符串后一半的开头
while (!isEmpty(&s)) { // 依次将栈中的元素和字符串后一半中的元素比较
if (pop(&s) != str[j++]) {
return 0; // 如果有不同则不是回文串
}
}
return 1; // 如果全部比较都相同,则是回文串
}
int main() {
char str[MAX_STACK_SIZE]; // 定义一个字符数组用来存储字符串
printf("Please input a string:\n");
scanf("%s", str);
if (isPalindrome(str)) {
printf("Right\n");
} else {
printf("Wrong\n");
}
return 0;
}
```
希望能够帮到您!
阅读全文