读书人

寻找原因解决方法

发布时间: 2012-03-25 20:55:17 作者: rapoo

寻找原因
#include <iostream>
#include <string>
using namespace std;
int check(char *p)
{
int i,s,a,b,c,d;
i=s=a=b=c=d=0;
for(;p[i]!='\0';i++)
{
if(p[i]>='A'&&p[i]<='Z'&&a==0) {a++;}
if(p[i]>='a'&&p[i]<='z'&&b==0) {b++;}
if(p[i]>='0'&&p[i]<='9'&&c==0) {c++;}
if(d==0)
{
if((p[i]=='!')||(p[i]=='@')||(p[i]=='~')||(p[i]=='^')||(p[i]=='#')||(p[i]=='%')||(p[i]=='$')) {d++;}
}
}
s=a+b+c+d;
return s;
}

int main()
{
int M;
char str1[100];
cin>>M;
while (M--)
{
cin>>str1;
if(strlen(str1)>=8&&strlen(str1)<=16)
{
int sum;
sum=check(str1);
if(sum>=3) {cout<<"YES"<<endl;}
else {cout<<"NO"<<endl;continue;}

}
else
{
cout<<"NO"<<endl;
continue;
}
}
return 0;
}
这个在杭电上是正确的,可以AC的;
但下面那个为什么显示错误呢?求原因。
#include <iostream>
#include <string>
using namespace std;
int check(char *p)
{
int i,s,a,b,c,d;
i=s=a=b=c=d=0;
for(;p[i]!='\0';i++)
{
if(p[i]>='A'&&p[i]<='Z'&&a==0) {a++;}
if(p[i]>='a'&&p[i]<='z'&&b==0) {b++;}
if(p[i]>='0'&&p[i]<='9'&&c==0) {c++;}
if(d==0)
{
if((p[i]=='!')||(p[i]=='@')||(p[i]=='~')||(p[i]=='^')||(p[i]=='#')||(p[i]=='%')||(p[i]=='$')) {d++;}
}
}
s=a+b+c+d;
return s;
}

int main()
{
int M;
char str1[100];
cin>>M;
while (M--)
{
cin>>str1;
if(strlen(str1)<8&&strlen(str1)>16) {cout<<"NO"<<endl;continue;}
else
{
int sum;
sum=check(str1);
cout<<sum<<endl;
if(sum>=3) {cout<<"YES"<<endl;}
else {cout<<"NO"<<endl;}
}
}
return 0;
}

下面那个如果输入3个数字,都会执行else的部分,求原因啊?

[解决办法]
if(strlen(str1)<8&&strlen(str1)>16) {cout<<"NO"<<endl;continue;}
这个条件你自己看下,三个数字,这个表达式是FALSE的,小于8,但是不大于16,所以是FALSE,所以执行ELSE。
你改成||估计就可以,其他没有看。

读书人网 >C++

热点推荐