Я писал программу, в которой я хочу печатать общие слова между двумя строками. Ну, я использую две петли и разделяю эти строки в этих двух циклах. Но не получило необходимого результата. Затем я немного изменил программу, а затем исследовал, что внешний цикл выполняется только один раз. Не понял, почему? Кто-нибудь есть идея?Странное поведение strtok в C?
#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;
}
'если (зЬгстр (tar1, tar2))' ... уверен? в случае, если существует совпадение, 'if' будет FALSE ... –
Вы не можете использовать' strtok' в двух разных строках одновременно. Я предлагаю 'strtok_s' или' strtok_r' в зависимости от того, что доступно. Даже тогда вы можете анализировать каждую строку только один раз, а не в вложенном цикле, на который вы надеетесь. Сначала необходимо извлечь указатели маркеров в массивы, а затем выполнить поиск вложенных циклов. –
сплит для хранения в массивы, затем цикл. потому что семья strtok изменит строку. – BLUEPIXY