2010-03-23 9 views
0

Dans la méthode que j'ai essayé ceci:En C, comment vérifier si une chaîne contient 2 chiffres, 1 lettre et 4 chiffres?

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}; 

Mais je reçois partout des erreurs et il ne fonctionne pas.

+2

Vous ne pouvez pas utiliser les chiffres comme noms de variables. –

+0

Les erreurs partout peuvent provenir du fait que vous essayez de déclarer des variables avec des noms comme '1' - cela ne va pas fonctionner si bien. De plus, le '% d' dans scanf ne correspond pas à un chiffre, il correspond à un entier entier. Pour la vraie réponse, cependant, regardez un de ces personnages caractère par caractère là-bas. – Cascabel

+0

Imaginez que ces noms de variables numériques soient des noms réels et essayez de comprendre la logique derrière les 2 lignes suivantes: o – Blindy

Répondre

4

Vraisemblablement dans cet ordre?

Parcourez la chaîne un caractère à la fois et utilisez isdigit() isalpha() pour les vérifier.
Ou tout simplement faire:

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 
} 
+0

+1. Correction d'une faute de frappe dans 'isalpha()'. EDIT: Damn, hors de votes :( –

2

Tout d'abord, en C, les noms de variables ne peut pas commencer par un chiffre, ou être un numéro pour cette question. Donc, la déclaration de int 1,2,3,4,5,6,7 ne compilera pas, ainsi que char 3;

Voici un exemple de la façon dont vous pourriez le faire en supposant que l'entrée est une valeur nulle chaîne terminée:

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; 
    } 
} 

Pas le meilleur morceau de code, mais devrait faire l'affaire. Et il devrait compiler avec un compilateur C.