| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1516 人关注过本帖
标题:请问一下,我这个代码在PTA一直有一个答案错误?
只看楼主 加入收藏
狙神杨大哥
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2019-3-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
请问一下,我这个代码在PTA一直有一个答案错误?
题目是输入一个字符串,判断是否是合法邮箱(格式正确即可,不管是否真的存在)输入的只能是字母、数字、下划线、@以及.五种, @前后只能是字母或者数字,而且.后只能是com, 是则输出YES ,否则输出NO。
#include<stdio.h>
#include<string.h>
int main()
{
    char em[50];
    int i=0,len;
    int dui = 0,aite = 0,qita = 0;
    scanf("%s",em);
    len = strlen(em);
    while(1){
        if(em[0] == '@'){
            printf("NO");
            break;
        }
        while(em[i] != '@'){
            if(em[i]=='_' || (em[i]>='a' && em[i]<='z') || (em[i]>='A' && em[i]<='Z') || (em[i]>='0' && em[i]<='9')) dui=1;
            else qita = 1;        
            i++;
            if(i==len - 1){
                printf("NO");
                break;
            }
        }
        if(i==len - 1){
            break;
        }
        if(((em[i-1]>='a' && em[i-1]<='z') || (em[i-1]>='A' && em[i-1]<='Z') || (em[i-1]>='0' && em[i-1]<='9')) && ((em[i+1]>='a' && em[i+1]<='z') || (em[i+1]>='A' && em[i+1]<='Z') || (em[i+1]>='0' && em[i+1]<='9'))){
            dui = 1;
        }
        else{
            printf("NO");
            break;
        }
        if(qita == 1){
            printf("NO");
            break;
        }
        qita = 0;
        i++;
        while(em[i] != '.'){
            if(em[i]=='_' || (em[i]>='a' && em[i]<='z') || (em[i]>='A' && em[i]<='Z') || (em[i]>='0' && em[i]<='9')) dui=1;
            else{
                qita = 1;   
                break;
            }        
            i++;
        }   
        if(qita == 1){
            printf("NO");
            break;
        }
        if((em[i+1] != 'c' || em[i+2]!= 'o'|| em[i+3] != 'm') || em[i+4] != '\0'){
            printf("NO");
            break;   
        }
        else {
            printf("YES");
            break;   
        }
    }
    return 0;
 }
搜索更多相关主题的帖子: 答案 错误 printf break || 
2019-03-06 14:11
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
一般PAT里无法通过都会简单指明原因
abc@显示No
再检查下输出格式是否有要求(比如yes no后面需要回车)

能编个毛线衣吗?
2019-03-06 15:44
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
收藏
得分:10 
程序代码:
#include<stdio.h>
#include<string.h>
#define TURE ((em[i]>='A'&&em[i]<='Z')||(em[i]>='a'&&em[i]<='z')||(em[i]>='0'&&em[i]<='9')||em[i]=='_')
int main()
{
    char em[50];
    int FLAG = 1;//默认格式正确,若出现非法字符或格式错误,令FLAG = 0
    scanf("%s", em);

    int i = 0, len = strlen(em);
    
    //判断第一个字符是否正确
    if (i < len && em[i++] == '@')
        FLAG = 0;

    //判断'@'之前的符号是否正确
    while (FLAG && i < len && em[i] != '@')
    {
        if (!TURE)
        {
            break;
            FLAG = 0;
        }
        i++;
    }

    //判断'@'后第一个字符是否正确
    if (i < len && em[i++] == '.')
        FLAG = 0;

    //判断'@'之后且'.'之前的符号是否正确
    while (FLAG && i < len && em[i] != '.')
    {
        if (!TURE)
        {
            break;
            FLAG = 0;
        }
        i++;
    }
    
    //判断'.'之后的符号是否正确并输出结果
    if (FLAG && i < len && (strcmp(em + i, ".com") == 0))
        printf("YES\n");
    else
        printf("NO\n");

    return 0;
}
2019-03-06 16:13
快速回复:请问一下,我这个代码在PTA一直有一个答案错误?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016703 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved