2016-11-20 3 views
0

Я пишу простую программу, которая проверяет пароль с 8 символами с минимум двумя номерами. Это, как правило, присваивается новичкам, но я не мог найти ответы на свой вопрос в любом месте в Интернете и не смог выполнить задание, но мне все равно хотелось бы узнать, как это сделать, и подумать, что это поможет другим новичкам, таким как я.Как отличить типы данных в строке с C на Linux?

Мне нужно проверить, что строка, содержащая как буквы, так и цифры, содержит не менее двух чисел.

isalpha() или isdigit() считывает только один символ за раз, а strspn (,) или strcspn() прекращают вычислять длину, когда он попадает в байт, не найденный в другом сегменте, поэтому, если я ввожу пароль, например «a1b2c3», используя одну из этих функций, выход будет равен 1 или 0. Я также попытался переключить типы данных с char на int и наоборот.

Это то, что я до сих пор:

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <string.h> 
#include <ncurses.h> 

int main() { 

    char password[8];    
    char numVerify[] = "1, 2, 4, 5, 6, 7, 8, 9"; 
    int valid = 10 

    do { 
     printf("Enter Password: \n"); 
     scanf("%s",password); 
     int a = strspn(password,numVerify); 

    if (strlen(password) <= 8 && a >= 2) { 

     printf("You have entered a valid password"); 

     break; 
     } 
     else { 
     printf("\e[2J\e[H"); 
     printf("Invalid Password!\nEnter password with a maximum of 8 characters and at least 2 numbers\n");   
      }  
    }while(valid > 5); 

    return 0; 
} 
+1

Переменная «пароль» должна быть «char password [9];» Кроме того, strspn() не делает то, что я думаю, вы думаете, что это так. Возможно, вам стоит просто подсчитать количество символов в «пароле», которое «isdigit()» возвращает ненулевое значение. После тестирования всех символов в «пароле», если ваш digit_count больше или равен 2, он переходит к редактированию. – TonyB

ответ

0

Вам нужно подсчитать кол-чисел в строке. Используйте цикл for для прохождения каждой буквы в строке

int numcount=0; 
for (i = 0; i < strlen(string); i++) { 
if(isdigit()) numcount+=;} 
if(numcount>=2) //password is good {} 
else {} //bad 

Возможно, не очень хороший синтаксис. Хавент использовал C некоторое время, но это идея.

+0

Это работало для меня, с немного отличающимся синтаксисом, но это именно то, что мне нужно. Спасибо огромное! –

 Смежные вопросы

  • Нет связанных вопросов^_^