设计一个算法判断一个字符串是否为回文,并给出主函数
时间: 2023-12-13 14:49:41 浏览: 30
算法如下:
1. 定义两个指针,分别指向字符串的首尾字符。
2. 如果两个指针指向的字符相同,则继续比较下一个字符。
3. 如果两个指针指向的字符不同,则说明该字符串不是回文。
4. 当两个指针相遇时,说明该字符串是回文。
主函数代码如下:
```
#include <iostream>
#include <string>
using namespace std;
bool isPalindrome(string s) {
int left = 0, right = s.size() - 1;
while (left < right) {
if (s[left] != s[right]) {
return false;
}
left++;
right--;
}
return true;
}
int main() {
string s;
cout << "请输入一个字符串:";
cin >> s;
if (isPalindrome(s)) {
cout << s << " 是回文字符串" << endl;
} else {
cout << s << " 不是回文字符串" << endl;
}
return 0;
}
```
在主函数中,首先输入一个字符串,然后调用 isPalindrome 函数判断是否为回文字符串,最后输出判断结果。
相关问题
采用字符串容器存储,设计算法判断该字符串是否为回文
回文字符串是指正着读和倒着读都一样的字符串。为了判断一个字符串是否为回文,可以采用字符串容器存储,并设计以下算法:
1. 定义两个指针,分别指向字符串的首尾字符。
2. 比较两个指针所指向的字符是否相同,如果相同则继续比较下一个字符,直到两个指针相遇。
3. 如果两个指针相遇,则说明该字符串是回文,否则不是回文。
具体实现可以参考以下代码:
```c++
#include <iostream>
#include <string>
using namespace std;
bool isPalindrome(string str) {
int left = 0, right = str.length() - 1;
while (left < right) {
if (str[left] != str[right]) {
return false;
}
left++;
right--;
}
return true;
}
int main() {
string str;
cout << "请输入一个字符串:";
cin >> str;
if (isPalindrome(str)) {
cout << "该字符串是回文" << endl;
} else {
cout << "该字符串不是回文" << endl;
}
return 0;
}
```
在上面的代码中,isPalindrome函数用于判断一个字符串是否为回文,如果是回文则返回true,否则返回false。在主函数中,先输入一个字符串,然后调用isPalindrome函数进行判断,最后输出结果。
用顺序栈和顺序队列来设计算法判断一个输入的字符串是否是回文(c语音)
好的,我可以回答你的问题。下面是使用顺序栈和顺序队列来设计算法判断一个输入的字符串是否是回文的代码:
```
#include <stdio.h>
#include <string.h>
// 定义最大字符串长度
#define MAX_SIZE 50
// 定义栈结构体
typedef struct {
char data[MAX_SIZE];
int top;
} SeqStack;
// 定义队列结构体
typedef struct {
char data[MAX_SIZE];
int front;
int rear;
} SeqQueue;
// 初始化顺序栈
void InitStack(SeqStack *S)
{
S->top = -1;
}
// 判断顺序栈是否为空
int StackEmpty(SeqStack *S)
{
return S->top == -1;
}
// 入栈
int Push(SeqStack *S, char x)
{
if (S->top == MAX_SIZE - 1)
return 0;
S->data[++S->top] = x;
return 1;
}
// 出栈
int Pop(SeqStack *S, char *x)
{
if (StackEmpty(S))
return 0;
*x = S->data[S->top--];
return 1;
}
// 初始化顺序队列
void InitQueue(SeqQueue *Q)
{
Q->front = Q->rear = 0;
}
// 判断顺序队列是否为空
int QueueEmpty(SeqQueue *Q)
{
return Q->front == Q->rear;
}
// 入队
int EnQueue(SeqQueue *Q, char x)
{
if ((Q->rear + 1) % MAX_SIZE == Q->front)
return 0;
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAX_SIZE;
return 1;
}
// 出队
int DeQueue(SeqQueue *Q, char *x)
{
if (QueueEmpty(Q))
return 0;
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MAX_SIZE;
return 1;
}
// 判断字符串是否是回文
int IsHuiwen(char *str)
{
SeqStack S;
SeqQueue Q;
int len = strlen(str);
int i, j;
char x, y;
InitStack(&S);
InitQueue(&Q);
// 字符串入栈、入队
for (i = 0; i < len; i++) {
Push(&S, str[i]);
EnQueue(&Q, str[i]);
}
// 判断是否是回文
for (i = 0; i < len / 2; i++) {
Pop(&S, &x);
DeQueue(&Q, &y);
if (x != y)
return 0;
}
return 1;
}
// 主函数
int main()
{
char str[MAX_SIZE];
printf("请输入一个字符串:");
scanf("%s", str);
if (IsHuiwen(str))
printf("%s 是回文\n", str);
else
printf("%s 不是回文\n", str);
return 0;
}
```
以上是使用顺序栈和顺序队列来设计算法判断一个输入的字符串是否是回文的代码。如果您还有其他问题,请继续提问。