2016-04-14 5 views
1

私は1 2 3 4,5 6 7 8,9 10 11 12のような入力文字列から、strtok()関数を使って分割してcプログラムで個々の数字を取り出そうとしていました。これは私が以下のプログラミングを書いたが、最初のカンマまで読み込んでいた区切り文字(注:入力サイズは変わる可能性がありますが、カンマは4桁後ですが、k(5,6,7など)桁テストケースをベースにしています)。入力文字列をcで指定された形式から分割できませんか?

fgets(str,80,stdin); 

/* read str with comma(,)delimiter */ 
token = strtok(str, ","); 

/* walk through other tokens */ 
    while(token != NULL) 
    { 

     // read token string with space delimiter 
     token2 = strtok(token, " "); 
     while(token2 != NULL) 
     { 
      printf("%s \n", token2);  
      token2 = strtok(NULL, " "); 
     } 

     token = strtok(NULL, ","); 
    } 
+0

あなたは 'strtok'呼び出しのいくつかの結果で何もしておらず、間違ったポインタ引数を渡しています。 'strtok'自体が' NULL'を返すまで、 'NULL'ポインタで繰り返し呼び出す必要があります。別にして、 'fgets'は末尾の' newline'を保持するので、区切り文字列に '\ n'を追加する必要があります。 –

+0

入力を処理する簡単なテストプログラムの期待される出力は?各桁、各番号、各グループ、その合計は?それは不明だ。 –

答えて

0

strtokリエントラントではありません - あなたは、一度に1つの文字列をトークン化することができます。一度に複数の文字列を同時にトークン化する場合は、代わりにstrtok_rを使用してください。それは能力の低いことはありませんよういっそのこと、常にstrtokに優先してstrtok_rを使用します。

char *inner, *outer; 
fgets(str,80,stdin); 

/* read str with comma(,)delimiter */ 
token = strtok_r(str, ",", &outer); 

/* walk through other tokens */ 
while(token != NULL) 
{ 

    // read token string with space delimiter 
    token2 = strtok_r(token, " ", &inner); 
    while(token2 != NULL) 
    { 
     printf("%s \n", token2);  
     token2 = strtok_r(NULL, " ", &inner); 
    } 

    token = strtok_r(NULL, ",", &outer); 
} 

はまた、同様strsepを調査することをお勧めします。

0

strtokの実装では、NULLではない最後の文字列が使用されます。

したがって、ライン:

token = strtok(NULL, ","); 

は動作しません。

トークンの正確な数を知っている場合はsscanfを使用できます。

/* read str with comma(,)delimiter */ 
token = strtok(str, ","); 

/* walk through other tokens */ 
while(token != NULL) 
{ 
    int num1; 
    int num2; 
    int num3; 
    int num4; 

    if (sscanf(token, "%d %d %d %d", &num1, &num2, &num3, &num4) != 4) 
    { 
     // Problem. 
    } 
    else 
    { 
     // Use the numbers 
    } 

    token = strtok(NULL, ","); 
} 
+0

各トークンの正確な桁数がわからない場合は、sscnafを使用してすべての数字を取得する方法を教えてください。 –

+0

@BalaKrishnaコメントではなく質問を編集することで、「合計入力」が意味するものを明確に説明してください。 –

関連する問題