2015-10-16 47 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