2016-07-30 25 views
0

Ich habe eine Zeichenfolge wie folgt definiert:überprüfen Sie, ob Zeichenfolge entspricht ein bestimmtes Format

char *str 

Wie kann ich überprüfen, ob die Zeichenfolge das Format angepasst:

x-y-z 

Wo x, y und z alle sind Typ int.

Beispiel: die Zeichenfolge 1-2-4 gültig sein sollte, während "1-2*3", "1-2", "1-2-3-4" ungültig sind.

+2

Was haben Sie versucht, sich selbst? Wie hat das funktioniert oder nicht? Welche Probleme haben Sie mit Ihrem Programm? Lesen Sie auch, wie Sie gute Fragen stellen können (http://stackoverflow.com/help/how-to-ask) und erfahren Sie, wie Sie ein [minimales, vollständiges und verifizierbares Beispiel] erstellen können (http: // stackoverflow .com/hilfe/mcve). –

+0

Verwenden Sie nur reines C oder ist zum Beispiel eine Bibliothek für reguläre Ausdrücke eine Option? – usr2564301

+0

Ich denke, Sie sollten einen regulären Ausdruck verwenden, um Ihre Zeichenfolge anzupassen. Suchen Sie einige Google-Suche und Sie finden viele Beispiele Johan – baliman

Antwort

0

Wenn Sie mehr Informationen benötigen als nur die Übereinstimmung, dann können Sie mit einer Schleife durch die Zeichenfolge gehen. Ich gebe dir einen Startcode.

int i = 0; 
int correct = 1; 
int numberOfDashes = 0; 
while(correct && i < strlen(str)) { 
    if(isdigit(str[i])) { 

    } 
    else { 
    if(str[i] == '-') { 
     numberOfDashes++; 
    } 
    } 
    i++; 
} 
3

Eine einfache Art und Weise zu erreichen, was Sie wollen, ist scanf() zu verwenden und überprüfen Sie den Rückgabewert. Etwas wie

ret = scanf("%d-%d-%d", &x, &y, &z); 
    if (ret == 3) {// match}; 

würde für einen einfachen Ansatz gut tun.

Dieser Ansatz wird nicht für mehrere Datentypen und mehr Eingänge arbeiten, aber nur für ein festes Format. Für ein komplexeres Szenario sollten Sie eine Regex-Bibliothek in Betracht ziehen.

+3

es wird nicht funktionieren für "1-2-3-4" obwohl .. – artm

+4

(Vielleicht besser vorschlagen 'sscanf'?) – usr2564301

+2

Test als' -1- 2-3' – BLUEPIXY

0

Entlang der Linie mit Souravs Antwort.

int check(char t[]) 
{ 
    int a, b, c, d; 
    return sscanf(t, "%d-%d-%d-%d", &a, &b, &c, &d) == 3; 
} 


int main() 
{ 
    char s[] = "1-2-4"; 
    char t[] = "1-2-3-4"; 
    printf("s = %s, correct format ? %s\n", s, check(s) ? "true" : "false"); // <-- true 
    printf("t = %s, correct format ? %s\n", s, check(t) ? "true" : "false"); // <-- false 
} 
+2

Test als "1-2-4-" – BLUEPIXY

0

Sie können sscanf für Ihr spezifisches Beispiel verwenden.

int main() 
{  
    int x,y,z; 
    char *str="1-2-4"; 
    int a = sscanf(str, "%d-%d-%d", &x, &y, &z); 
    printf("%s", (a == 3) ? "Correct format":"Incorrect format"); 

    return 0; 
} 

Demo on Ideone

während das sscanf Format nicht für diese bestimmten Strings arbeiten:

int main() 
{  
    int x,y,z; 
    char *str="1-2*3"; //or "1-2" or ""1-2-3-4"" 
    int a = sscanf(str, "%d-%d-%d", &x, &y, &z); 
    printf("%s", (a == 3) ? "Correct format":"Incorrect format"); 

    return 0; 
} 

Demo on Ideone

Für diese umgehen, müssen Sie regular expressions verwenden als t Die anderen haben es schon gesagt.

Verwandte Themen