私は2つの文字列の間に共通の単語を印刷するプログラムを書いていました。さて、私は2つのループを使用し、それらの2つのループでこれらの文字列を分割します。しかし、必要な結果を得られなかった。その後、プログラムを少し変更してから、その外側ループが1回だけ実行されることを調べました。理由を知ることができませんでしたか?誰も考えられない?Cでstrtokの奇妙な行動?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char str1[] = "Japan Korea Spain Germany Australia France ";
char str2[] = "England USA Russia Italy Australia India Nepal France";
char *tar1 = strtok(str1," ");
char *tar2 = NULL;
while(tar1)
{
tar2 = strtok(str2," ");
while(tar2)
{
if(strcmp(tar1,tar2)) printf("%s %s\n",tar1 , tar2);
tar2 = strtok(NULL," ");
}
tar1 = strtok(NULL," ");
tar2 = NULL;
}
return 0;
}
'(のstrcmp(TAR1、TAR2))' ...確かならば?一致がある場合、 'if'はFALSEになります... –
' strtok'を2つの異なる文字列で同時に使用することはできません。私は 'strtok_s'または' strtok_r'のどちらかが利用可能であることをお勧めします。それでも、あなたはあなたが望む入れ子ループではなく、各文字列を1回だけ解析することができます。最初に配列にトークンポインタを抽出し、ネストされたループ検索を実行する必要があります。 –
分割して配列に格納し、ループします。 strtokファミリーが文字列を変更するためです。 – BLUEPIXY