首页 > 代码库 > HDU 1039[Easier Done Than Said?] 字符串处理
HDU 1039[Easier Done Than Said?] 字符串处理
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1039
题目大意:给一个字符串,看是否符合密码的要求。
规则:
1.至少有1个元音字母。
2.不能有3个连续的元音字母或辅音字母
3.不能有相同的字母连续出现(除了ee,oo)
关键思想:耐心地处理字符串
代码如下:
//可优化 #include <iostream> #include <algorithm> #include <string.h> using namespace std; string t; bool isv(char a){ return a==‘a‘||a==‘e‘||a==‘i‘||a==‘o‘||a==‘u‘; } bool rule1(char *a){ return strchr(a,‘a‘)!=NULL||strchr(a,‘e‘)!=NULL||strchr(a,‘i‘)||strchr(a,‘o‘)||strchr(a,‘u‘); } bool rule(char *a){ int b[2]={0,0};//b[0]为连续元音数,b[1]为连续辅音数。 for(int i=0;i<t.size();i++){ if(isv(a[i]))b[0]++,b[1]=0; else b[1]++,b[0]=0; if(b[0]>=3||b[1]>=3)return false; if (i>0)if(a[i-1]==a[i]&&a[i]!=‘e‘&&a[i]!=‘o‘){ return false; } else { if(i+1<t.size()) if(a[i-1]==a[i]&&a[i]==a[i+1])return false; } } for(int i=1;i<t.size();i++){ } return true; } int main(){ while(cin>>t&&t!="end"){ char a[102]; memset(a,0,sizeof(a)); strncpy(a,t.c_str(),t.size());//因为后面用到函数要求char *,所以把字符串转化成字符数组。 if(rule1(a)&&rule(a)) cout<<"<"<<a<<"> is acceptable."<<endl; else cout<<"<"<<a<<"> is not acceptable."<<endl; } return 0; }
HDU 1039[Easier Done Than Said?] 字符串处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。