密码判断并加密 写了很久很复杂cpp

密码判断并加密
用户密码的格式是:

1)以大写或小写字母开头
2)至少要有8个字符,最长不限
3)由字母、数字、下划线或 '-' 组成

输入若干字符串,判断是不是符合密码的条件。
如果不符合,输出no,

如果符合密码条件,输出加密后的密码,加密规则为把一个字母替换成它之后的第5个字母,注意大写字母Z的下一个字母是A,小写字母z的下一个字母是a。

如下:

img

代码:

#include <stdio.h>
#include <string.h>
//判断是否是字母
int iszm(char c)
{
    if(c>='a' && c<='z') return 1;
    else if(c>='A' && c<='Z') return 1;
    else return 0;
}
//判断是否是数字
int isnmb(char c)
{
    if(c>='0' && c<='9') return 1;
    return 0;
}

int isvalid(char buf[])
{
    int i = 0;
    while(buf[i])
    {
        if(iszm(buf[i]) || isnmb(buf[i]) || buf[i]=='-' || buf[i]=='_')
            i++;
        else
            return 0;
    }
    return 1;
}

//字符加密
void jm(char buf[],int n)
{
    int i=0;
    while (buf[i])
    {
        if(buf[i]>='a' && buf[i]<='z')
        {
            buf[i] = buf[i]+5;
            if(buf[i]>'z')
                buf[i] = buf[i] - 26;
        }
        else if(buf[i]>='A' && buf[i]<='Z')
        {
            buf[i] = buf[i]+5;
            if(buf[i]>'Z')
                buf[i] = buf[i] - 26;
        }
        i++;
    }
}

int main()
{
    char buf[100];
    while( 1)
    {
        gets(buf);
        if(strlen(buf)==0) break;
        if(iszm(buf[0]) && strlen(buf)>=8 && isvalid(buf))
        {
            jm(buf,5);
            printf("%s\n",buf);
        }else
            printf("no\n");
    }

    return 0;
}