【 OJ 】 HDOJ1039 模拟类问题 [ 36 ]

本文介绍了一个使用C++实现的字符串合法性检查算法,该算法确保字符串至少包含一个元音字母,避免连续三个元音或辅音,且不含有除'ee'或'oo'外的连续重复字符。通过详细解析代码逻辑,展示了如何有效验证字符串是否符合特定规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ummm.....这题也是泡泡水题....判断有点烦

AC代码:

# include<iostream>
# include <string>
using namespace std;
char v[5] = { 'a', 'e', 'i', 'o', 'u' };// 元音'a', 'e', 'i', 'o', and 'u';
//规则 1 至少一个元音  2 不能出现连续3个元音3个辅音 4 不能出现2个连续的相同字母 除了 ee oo
void out(string &str, bool isok) {
	if (isok) {
		cout << "<" << str << ">" << " is acceptable." << endl;
	}
	else {
		cout << "<" << str << ">" << " is not acceptable." << endl;
	}
}
bool IsOk(string&str) {
	bool vv=false;
	int vn, cn, cl;
	char pre='1';
	int i,j;
	bool isv;
	vn = cn = 0;
	for (i = 0; i < str.length(); ++i) {
		isv = false;
		if (str[i] == pre) {//查连续的
			if (str[i] == 'e' || str[i] == 'o') //ee oo 合法
				;//do nothing
			else
				return false;
		}
		for (j = 0; j < 5; ++j) {
			if (str[i] == v[j])
			{
				vv = true;//判全局
				isv = true;//判当前数是否为元音
				cn = 0;//辅音个数重置
				vv++;
				vn++;
				if (vn == 3)
					return false;
				break;
			}
		}
		if (!isv) {//是辅音
			vn = 0;//元音个数重置
			cn++;
			if (cn == 3) {
				return false;
			}
		}
		pre = str[i];
	}
	if (vv)
		return true;
	else
		return false;
}
int main(void) {
	string letter;
	cin >> letter;
	while (strcmp(letter.c_str(),"end")) {
		out(letter, IsOk(letter));
		cin >> letter;
	}
	system("pause");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值