В C, как я могу проверить, содержит ли строка 2 цифры, 1 буква и 4 цифры? - PullRequest
0 голосов
/ 24 марта 2010

В методе я пробовал это:

int 1, 2, 4, 5, 6, 7;
char 3;
char display[10];

scanf("%d%d%c%d%d%d%d", &1, &2, &3, &4, &5, &6, &7);
display = {1, 2, 3, 4, 5, 6, 7};

Но я везде получаю ошибки, и это не работает.

Ответы [ 2 ]

4 голосов
/ 24 марта 2010

Предположительно в таком порядке?

Пройдите по строке символ за раз и используйте isdigit () isalpha () для проверки каждого.
Или просто сделайте:

char test[] = "12B3456";

if ( (strlen(test)>6) &&
     isdigit(test[0]) && 
     isdigit(test[1]) &&
     isalpha(test[2]) && 
     isdigit(test[3]) &&
     isdigit(test[4]) &&
     isdigit(test[5]) &&
     isdigit(test[6]) ) 
{
   // valid
}
2 голосов
/ 24 марта 2010

Прежде всего, в C имена переменных не могут начинаться с цифры или быть числом в этом отношении. Поэтому объявление int 1,2,3,4,5,6,7 не будет компилироваться, как и char 3;

Вот пример того, как вы могли бы сделать это, предполагая, что ввод является строкой с нулевым окончанием:

int matches(char *input){
    int i;

    /* This array contains 1 in places where a digit is expected */
    char expected_digits[] = {1,1,0,1,1,1,1};

    for(i = 0 ; input[i] != 0 && i < 7; i++){
        if(expected_digits[i] == 1){
            if(!isdigit(input[i])){
                 return 0;
            }
        }
        else{
            if(!isalpha(input[i]))
            {
                 return 0;
            }
        }
     }

     if(i == 7) {
         /* We reached the end of the input string and all its places matched */
         return 1;
     }
     else{
         return 0;
     }
}

Не самый лучший кусок кода, но он должен сделать свое дело. И это должно скомпилироваться с компилятором Си.

...