问题标题: 酷町堂:1088

0
0
已解决
王俊杰
王俊杰
高级光能
高级光能

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;
}
 请大佬解答


0
已采纳
包涵宇
包涵宇
中级天翼
中级天翼

王俊杰@

我也不知道原因,一用FLAG就70分

那就不用FLAG了

首先

flag=0;

break;

改为

cout<<"No";

return 0;

然后将

 if(flag=1)

改为

if((a[0]<='Z'&&a[0]>='A')||a[0]=='_')

因为:不以数字开头,如以字母开头,必为大写字母。

可AC

望采纳

0
0
0
曹砚青
曹砚青
中级光能
中级光能

你可以问老师,你这里少了一个特判,else对应的是什么,话不多说,放核心

采纳吧

0
曹砚青
曹砚青
中级光能
中级光能

 

@王俊杰,我用了不止一种做法​​​​​​

0
包涵宇
包涵宇
中级天翼
中级天翼

你。。。

唉,你判断全错了!

我们应该先设一个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";

望采纳!

0
王俊杰
王俊杰
高级光能
高级光能

包涵宇谢谢你的回答

按您的方法做的是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;

}

请大佬解答

我要回答