2016-07-30 19 views
0

Ich habe eine Struktur definiert, wie untenAufteilen einer Zeichenfolge in Elemente einer Struktur

struct gtid{ 
    int id1; 
    int id2; 
    int num; 
} 

Wie kann ich einen String in der Form „1-2-3“ umwandeln und die Struktur initialisieren entsprechend das ist

gtid -> id1 = 1; 
    gtid -> id2 = 2; 
    gtid -> num = 3; 

Oder Wie kann ich die Zeichenfolge in die entsprechende Struktur umwandeln.

Antwort

1

Sie können formatierte Werte von stdin mit scanf Funktion und von String mit sscanf Funktion lesen. Siehe das vollständige Beispiel unten.

#include <stdio.h> 

typedef struct { 
    int id1; 
    int id2; 
    int num; 
} gtid_t; 

int main(void) { 
    gtid_t gtid; 

    // read from stdin 
    scanf("%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num)); 
    printf("id1 = %d, id2 = %d, num = %d\n", gtid.id1, gtid.id2, gtid.num); 

    // read from string 
    char* str = "4-5-6"; 
    sscanf(str, "%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num)); 
    printf("id1 = %d, id2 = %d, num = %d\n", gtid.id1, gtid.id2, gtid.num); 

    return 0; 
} 

Ausgang wäre als

id1 = 1, id2 = 2, num = 3 
id1 = 4, id2 = 5, num = 6 

Wie @ DavidC.Rankin in den Kommentaren erwähnen folgt es besser ist, dass die Eingabe erfolgreich war zu überprüfen. Sie könnten if Aussage wie diese

if(sscanf(str, "%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num)) != 3) { 
    fprintf(stderr, "Invalid input: %s\n", str); 
} 

Als Ergebnis für str Wert 4-a-6 dieses Beispiel druckt

Invalid input: 4-a-6 
+0

Dank Fehler hinzufügen, Sorry, aber ich will es nicht von stdin lesen. Die Zeichenfolge ist bereits als char * str definiert. Und zuerst muss ich prüfen, ob die Zeichenfolge im richtigen Format ist, und sie dann konvertieren. –

+1

@RebeccaTucker meine Antwort hat bereits beide Beispiele mit 'stdin' und mit String definiert als' char * '. – NikolayKondratyev

+0

Oh Danke. Das hilft. Bitte denken Sie, dass es notwendig ist, vor der Konvertierung zu prüfen, ob die Zeichenfolge das richtige Format von x-y-z hat? Ich würde das auch gerne machen. Ich habe am Montag angefangen zu programmieren. Wünsch mir Glück !! –

Verwandte Themen