2015-10-16 88 views
0

试图找出这个特定的功能。我需要它用punct []扫描密码来查看它是否包含其中一个符号,但如果有一个符号,我需要它带回一个整数。我试过n = strlen(密码),但似乎没有工作。这是我迄今为止所拥有的。我也无法返回一个关于isalpha的if语句的整数以及应该将密码传递给它的isdigit。从比较两个char数组中返回整数

char password[17] = { '\0' }; 
char punct[] = { '!','@','#','$','%','^','&','*','?','_', '\0' }; 

    printf("Enter your test password: \n"); 
    fgets(password, 15, stdin); 

for (int j = 0; n = (strnlen(password)); j < n; j++) { 
     if (isalpha(password[j]) == true){ 
     int b = 1; 
     printf(" Must consist of at least one number 0-9.\n"); 
    } 
} 

的是数字我有这样的事情在脑海,但我需要它通过阵列

if(isdigit(passwords)){ 
return 1;} 
+0

你是什么意思_bring一个integer_?和_trouble返回一个integer_什么是整数? – wrangler

+0

我正在尝试制作一个程序,用户在其中输入内容,然后检查它是否有数字,字母或标点符号。如果缺少其中一个项目,它将带回一个错误。我希望程序为每个程序创建一个1,然后有一个单独的等式,如果它们都是1,它将提供一个成功的密码创建屏幕。如果这是有道理的。 – Chris

回答

0

的长度,运行它使用的unsigned char型的255数组的最佳方式,unsigned char flags[255]

然后初始化数组一次作为这样:

1 =阿尔法

2 =数字

4 =符号

memset(flags,0,255*sizeof(short)); 
for(unsigned int i='A';i<='Z';i++) flags[i]=1; 
for(unsigned int i='a';i<='z';i++) flags[i]=1; 
for(unsigned int i='0';i<='9';i++) flags[i]=2; 

flags[(unsigned char)'!']=4; 
flags[(unsigned char)'@']=4; 
flags[(unsigned char)'#']=4; 
flags[(unsigned char)'$']=4; 
flags[(unsigned char)'%']=4; 
flags[(unsigned char)'^']=4; 
flags[(unsigned char)'&']=4; 
flags[(unsigned char)'*']=4; 
flags[(unsigned char)'?']=4; 
flags[(unsigned char)'_']=4; 

然后运行测试:

short m_flags=0; 
for(int i=0;i<strlen(password);i++) 
    m_flags|=flags[password[i]]; 

结果=:

if(m_flags & 1) //alpha present 
    if(m_flags & 2) //numerics present 
    if(m_flags & 4) //symbols present