简单的双双字符串判断方法——vector与string类的简单应用

此实例为华为2019实习生二次笔试题1,首先看双双字符串的定义:

双对称字符串:
1、正序逆序相同。
2、偶数个字符.
3、从第一个字符开始每一对字符相同(aabbccbbaa)。

输入和 输出要求如下:

题目:判断输入的字符串是否为双对称字符串,是的话输出对应的单对称字符串(aabbaa则输出aba),否则输出false。

网上的一些方法大都是采用数组的思想,以单个字符逐一比较来进行判断,这样做显得有些舍近求远,如果使用C/C++中string类封装好的方法来解,代码量会少很多。

在编程时需要注意一点,输入结束的标志是两个连续的换行符,这里如果换成数组来判断不如vector来得直接。

直接看程序运行结果:
判断结果部分的输出不需要的话直接删除一个变量和几行输出代码就OK了,这是我练手时的输出,写多了…- -
编程思想直接看代码吧,注释很详细了。

#include<iostream>
#include<vector>
#include<string>
using namespace std;

vector<string> instr;		//输入的单行或多行字符串
vector<string> outstr;		//去重后输出的字符串
vector<string> judgestr;	//判断该行是否是双双字符串的结果,是输出true,否输出flase 

void fun()
{
	string linestr;		//接收每一行输入的字符串
	/* 获取输入,以空行结束输入 */
	while (getline(cin, linestr))
	{
		if (!linestr.empty())	//如果输入的一行为空(即换行),结束输入
		{
			instr.push_back(linestr);	//将每一行字符串作为一个单元保存
		}
		else
		{
			//cout << "输入结束!" << endl;
			break;
		}
	}

	/* 主函数部分,判断双双字符串 */
	vector<string> rev_str;	//复制原字符集
	rev_str = instr;
	string out_ = "";	//去双后的单行字符串

	//字符串取逆
	for (int i = 0; i < instr.size(); i++)
	{
		reverse(instr[i].begin(), instr[i].end());
		if ((rev_str[i].compare(instr[i]) == 0) && (instr[i].size() % 2 == 0)) 
		{
			out_ = "";
			judgestr.push_back("true");
			for (int j = 0; j < rev_str[i].size(); j += 2)
			{
				out_ += rev_str[i][j];
			}
			outstr.push_back(out_);
		}
		else
		{
			judgestr.push_back("flase");
			outstr.push_back("flase");
		}
	}

	/* 输出结果 */
	cout << "\n/* 输出结果 */" << endl;
	for (int m = 0; m < outstr.size(); m++)
	{
		cout << outstr[m] << endl;
	}
	cout << "\n/* 判断结果 */" << endl;
	for (int m = 0; m < judgestr.size(); m++)
	{
		cout << judgestr[m] << endl;
	}
}

void main()
{
	printf("请输入要判断的字符集,以空行结束输入:\n");
	fun();
	getchar();
}

每天学习一点,加油鸭!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值