この形式で文字列をトークン化する必要があります。
pippo:c:C2,C3,C4:pippo
strtok を使用してこの文字列をトークン化するにはどうすればよいですか (トークン化を行ったら、文字列は必要ありません)。唯一の文字を char* 変数ではなく char 変数に格納したい。
この形式で文字列をトークン化する必要があります。
pippo:c:C2,C3,C4:pippo
strtok を使用してこの文字列をトークン化するにはどうすればよいですか (トークン化を行ったら、文字列は必要ありません)。唯一の文字を char* 変数ではなく char 変数に格納したい。
: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"
.
を使用して 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;
}