Я не понимаю, почему не работает функция strtok_s
Делаю лабу по программированию, сделал перебор и сравнение слов двух строк, основываясь, по большей части, на лекцию. Но почему-то работает неправильно. Я при помощи cout делал проверки внутри функции, и складывается ощущение, что как-то не так работает strtok_s. Понятное дело, что это я глупый, но помогите
вот код:
/* Присвоить переменной F значение true, если в предложении S1
есть хотя бы одно слово, которое отсутствует в предложении S2
и длина которого не превышает длину самого короткого слова S2,
в противном случае присвоить переменной F – false.*/
#include <iostream>
using namespace std;
bool search(char* a, char* b);
int main()
{
setlocale(LC_ALL, "Russian");
char s1[40] = "AUD DUDUD UD31 AUL AUX UD31";
cout << "Строка S1:" << endl << s1 << endl;
char s2[40] = "AUD DUDUD AUD AU AUX";
cout << "Строка S2:" << endl << s2 << endl;
bool F = search(s1, s2);
cout << "Значение переменной F: " << F << endl;
}
bool search(char* a, char* b)
{
bool f = 0;
char* m, * mp;
m = strtok_s(b, " ", &mp);
int minlen = strlen(m);
while (m != NULL)
{
if (strlen(m) < minlen) minlen = strlen(m);
m = strtok_s(NULL, " ", &mp);
}
cout << minlen << endl;
char p3[80];
p3[0] = NULL; //копия b
char* p1, * pp1;
char* p2, * pp2;
p1 = strtok_s(a, " ", &pp1);
while (p1 != NULL)
{
strcpy_s(p3, b);
p2 = strtok_s(p3, " ", &pp2);
while (p2 != NULL)
{
if (!strcmp(p1, p2))
{
if (strlen(p1) <= minlen)
{
f = true;
break;
}
}
p2 = strtok_s(NULL, " ", &pp2);
}
p1 = strtok_s(NULL, " ", &pp1);
}
return f;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Давайте допишем два отладочных вывода:
cout << "b = [" << b << "]\n";
bool f = 0;
char* m, * mp;
m = strtok_s(b, " ", &mp);
int minlen = strlen(m);
while (m != NULL)
{
if (strlen(m) < minlen) minlen = strlen(m);
m = strtok_s(NULL, " ", &mp);
}
cout << "b = [" << b << "]\n";
И что мы видим?
Строка S2:
AUD DUDUD AUD AU AUX
b = [AUD DUDUD AUD AU AUX]
b = [AUD]
2
Вопросов больше нет?
strtok_s изменяет строку, с которой работает.
Кстати, судя по
strcpy_s(p3, b);
p2 = strtok_s(p3, " ", &pp2);
вы это знаете.