在写牛客编程的密码验证合格程序时遇到的。
#include <iostream>
using namespace std;
void varify(string s){
int arr[4];
int point = 0;
int index = 0;
int repeat = 0;
if(s.length()<=8){
cout<<"NG"<<endl;
}
else{
for(auto a:s){
cout<<s<<endl;
if(a>='a'&&a<='z'){
arr[0] = 1;
}
else if(a>='A'&&a<='Z'){
arr[1] = 1;
}
else if(a>='0'&&a<='9'){
arr[2] = 1;
}
else{
arr[3] = 1;
}
if(index<=s.length()-2){
char a1 = a;
char a2 = char(a+1);
char a3 = char(a+2);
for(int i = point+1;i<s.length()-2;i++){
if(a1==s[i]&&a2==s[i+1]&&a3==s[i+2]){
repeat++;
index=s.length();
}
cout<<"1="<<a1<<" 2="<<s[i]<<" idex"<<index<<endl;
}
}
point++;
index++;
}
int count = 0;
for(int i:arr){
if(i==1)
count++;
}
if(count>=3&&repeat==0){
cout<<"OK"<<endl;
}
else{
cout<<"NG"<<endl;
}
}
}
int main() {
string a;
while (cin >> a) { // 注意 while 处理多个 case
varify(a);
}
}
如代码所示,我想直接a+1来访问s字符串其它字符,但是运行时会出现乱七八糟的字符。
修改成fo(int i=0;i<s.length();i++)就不会有这样的问题
还有int arr[4]我没有设定初始值的时候,默认值似乎是1不是0,改成int[4]{0,4}就好了。