高级光能
1088 合法文件名经验值:0
题目描述 Description
给定一个文件名字符串,判断是否为合法文件名。
合法文件名有如下规定:
1、只由数字、字母(大小写皆可)、下划线(_)组成。
2、不以数字开头,如以字母开头,必为大写字母。
输入描述 Input Description
输入为一行,包含一个长度不超过20的字符串,且字符串中不包含空格,
输出描述 Output Description
输出为一行,若它是合法文件名,则输出"Yes",否则输出"No"。
样例输入 Sample Input
Abcd1234_abcd
样例输出 Sample Output
Yes
错误代码,为啥不输出:
#include<iostream>
#include<string>
using namespace std;
int main(){
string a;
cin>>a;
for(int i=0;i<=a.size()-1;i++){
if(a[i]=='1'&&a[i]=='9'&&a[i]=='A'&&a[i]=='Z'&&a[i]=='a'&&a[i]=='z'&&a[i]=='_'){
cout<<"Yes";
}
if(a[i]!='1'&&a[i]!='9'&&a[i]=='A'&&a[i]=='Z'){
cout<<"No";
}
}
return 0;
}
请大佬解答
中级天翼
王俊杰@
我也不知道原因,一用FLAG就70分
那就不用FLAG了
首先
将
flag=0;
break;
改为
cout<<"No";
return 0;
然后将
if(flag=1)
改为
if((a[0]<='Z'&&a[0]>='A')||a[0]=='_')
因为:不以数字开头,如以字母开头,必为大写字母。
可AC
望采纳
中级天翼
你。。。
唉,你判断全错了!
我们应该先设一个FLAG
FLAG=1
然后遍历字符串
if(不满足题目要求)PS:也就是!(a[i]<='z'&&a[i]>='a')&&!(a[i]<='9'&&a[i]>='0')&&!(a[i]<='Z'&&a[i]>='A')&&a[i]!='_'
FLAG=0
break;
循环后
判断FLAG
如果=1 就干嘛
否则 cout<<"No";
望采纳!
高级光能
包涵宇谢谢你的回答
按您的方法做的是30分
下面是代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
string a;
bool flag=1;
cin>>a;
for(int i=0;i<=a.size()-1;i++){
if(!(a[i]<='z'&&a[i]>='a')&&!(a[i]<='9'&&a[i]>='0')&&!(a[i]<='Z'&&a[i]>='A')&&a[i]!='_' ){
flag=0;
break;
}
}
if(flag=1){
cout<<"Yes";
}
else{
cout<<"No";
}
return 0;
}
请大佬解答