数据结构—习题3.2 用栈判断回文字符串

1.问题描述

  • 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈) 

2.题目分析

  • 将字符串前一半入栈,然后,栈中元素和字符串后一半进行比较。即将第一个出栈元素和后一半串中第一个字符比较,若相等,则再出栈一个元素与后一个字符比较,……,直至栈空,结论为字符序列是回文。在出栈元素与串中字符比较不等时,结论字符序列不是回文。

3.代码实现

  • main.cpp
#include 
#include 
#include 
#include 

using namespace std;

int IsHuiWen2(string str) 
{
	stack s;   
	int i, len;
	char temp;
	len = str.size();            // 求字符串长度
	for (i = 0; i < len / 2; i++)  // 将一半字符入栈
		s.push(str[i]);
	
	if (len % 2 == 0)
	{
		while (!s.empty())
		{                       // 每弹出一个字符与相应字符比较
			temp = s.top();
			s.pop();
			if (temp != str[i])
				return 0;       // 不等则返回0                
			else
				i++;
		}
		
		return 1;      // 比较完毕均相等则返回1
	}
	else if (len % 2 != 0)
	{
		++i;
		while (!s.empty())
		{                       // 每弹出一个字符与相应字符比较
			temp = s.top();
			s.pop();
			if (temp != str[i])
				return 0;     // // 不等则返回0                
			else
				i++;
		}
		
		return 1; // 比较完毕均相等则返回 1
	}	
}
	
int main() 
{
	string str;
	cout<<"请输入字符串:";
	getline(cin, str);

	if (str.empty())
	{
		cout << "输入有误,请输入字符串:";
		getline(cin, str);
	}

	if (IsHuiWen2(str)) 
	{
		printf("是回文字符串!\n");
	}
	else 
	{
		printf("不是回文字符串!\n");
	}

	system("pause");

	return 0;
}
  • 运行结果

​​​​​​​

你可能感兴趣的:(数据结构)