2016-07-30 148 views
0

我有一個結構定義如下將字符串分割爲

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

一個結構的元件如何可以將字符串轉換的形式爲「1-2-3」和初始化結構相應地是

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

或者我該如何將字符串轉換爲適當的結構體。

回答

1

您可以從stdin使用scanf函數讀取格式化值,並從sscanf函數使用字符串讀取格式值。請參閱下面的完整示例。

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

輸出將如下

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

正如@ DavidC.Rankin提意見,最好是檢查輸入成功。你可以添加if聲明這樣一個

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

至於結果爲str價值4-a-6這個例子顯示錯誤

Invalid input: 4-a-6 
+0

謝謝,對不起,但我不希望從標準輸入讀取它。該字符串已被定義爲char * str。首先,我需要檢查字符串的格式是否正確,然後將其轉換。 –

+1

@RebeccaTucker我的答案已經有'stdin'的兩個例子,並且字符串被定義爲'char *'。 – NikolayKondratyev

+0

哦,謝謝。這有幫助。請你認爲有必要在轉換之前檢查字符串是否具有正確的x-y-z格式?我也很樂意這樣做。我在星期一開始學習如何編碼。祝我好運 !! –