3

この形式で文字列をトークン化する必要があります。

 pippo:c:C2,C3,C4:pippo

strtok を使用してこの文字列をトークン化するにはどうすればよいですか (トークン化を行ったら、文字列は必要ありません)。唯一の文字を char* 変数ではなく char 変数に格納したい。

4

2 に答える 2

7

:c: 部分に c のみが必要で、この形式になることがわかっている場合は、トークン化する必要はありません。あなたは簡単に行うことができます

char c = strchr(str, ':')[1];

これは最初の : を見つけ、それに続く文字を取得します。もちろん、 strtok も機能します。

strtok(str, ":");
char c = strtok(NULL, ":")[0];

これにより、2 番目にトークン化された単語が取得され、その単語の最初の文字が取得されます。一般に、さらに奥に進みたい場合は、代わりにループを使用することをお勧めします。この場合、他のバッファとは異なり、str バッファが書き込み可能である必要はありません。

最後に、pippoパーツが常に同じ長さである場合は、単純に回避できます

char c = str[6];

すべての場合において、str = "pippo:c:C2,C3,C4:pippo".

于 2012-10-29T16:30:52.487 に答える
0

を使用して 2 つのトークンの間の 1 文字を取得したい場合strtok()は、抽出した文字列の長さを確認することで実行できます。

int main ()
{
    char str[] ="pippo:c:C2,C3,C4:pippo";
    char * pch;
    char winner;

    pch = strtok (str,":"); 
    while (pch != NULL)
    {
      if(strlen(pch) == 1){   // if there's only 1 char we got it
        winner = pch[0];      // if there's more than 1 single char of :x: format you
        break;                // could check for that too here.
      }
      pch = strtok (NULL, ":");
    }

    printf("And the winner is: %c\n", winner);
    return 0;
}
于 2012-10-29T16:35:00.390 に答える