题解 | #密码验证合格程序#

密码验证合格程序

http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdbool.h>

int main(void)
{
    char str[101];
    char a;
    while(gets(str)){
        bool sWord = true;
        bool sword = true;
        bool snum  = true;
        bool selse = true;
        int  stype = 0;
        int len = strlen(str);
        char sub[len-2][4];
        int i, num;
        if(len < 8)
            goto NG;
        //printf("%s %d  ",str,len);
        for(i=0, num=0; i<len; i++){
            /* 分割为3个一组的字符串 */
            if((len-i) >= 3){
                memcpy(&sub[num], &str[i], 3);
                sub[num][3] = '\0';
                num++;
            }
            /*小写字母.数字.其它符号,以上四种至少三种 判断*/
            if(str[i]>= 'A' && str[i]<= 'Z'){
                 if(sWord){
                    sWord = false;
                    stype++;
                 }   
            }else if(str[i]>= 'a' && str[i]<= 'z'){
                 if(sword){
                    sword = false;
                    stype++;
                 } 
            }else if(str[i]>= '0' && str[i]<= '9'){
                if(snum){
                    snum = false;
                    stype++;
                 }            
            }else if(str[i] != ' ' && str[i]!= '\n'){
                 if(selse){
                    selse = false;
                    stype++;
                 }
            }
            //printf("%c %d\n",str[i], stype);
        }
      //printf("%d , num %d\n", stype, num);
      if(stype < 3)
            goto NG;
       
        /* 长度大于2的包含公共元素的子串重复 判断 */
        for(int i=0; i<num; i++){ 
            //printf("%s\n", sub[i]);
            for(int j=0; j<num; j++){
                if(j == i)
                    continue;
                if(strcmp(sub[i], sub[j]) == 0)
                    goto NG;
            }
        }
        
        printf("OK\n");
        continue;       
NG:
        printf("NG\n");
        
    }

    return 0;
}
全部评论

相关推荐

05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务