OriginalGriff
Первое, что нужно заметить, это то, что технически можно утверждать, что "bea" полностью содержится в "beautiful" в том смысле, что все буквы находятся там последовательно и рядом друг с другом: я ожидал бы найти "true" для этого.
И когда я запускаю ваш код с "beautiful" и "bea", я получаю false
в любом случае...
Как я делаю для "красивых" и "eau", что неправильно, и для "красивых" и "aut", но не для "красивых" и "auti", которые возвращают истину.
Этот код-плохой способ сделать это: вы копируете много информации только для того, чтобы использовать стандартные функции, и это часть вашей проблемы. Прочтите определение понятия strncpy[^] а затем подумайте о том, что он помещает в ваш буфер sub1, и что strcmp[^] собирается сделать с этим.
Это ваше домашнее задание: хотя я бы не стал делать его так (это очень неэффективно), это также t=ваша задача заставить его работать. Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.
Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!
Да, и сделай себе одолжение: сделай отступ в своем коде! Он становится намного более читабельным, и с ним легче работать, если вы это сделаете...
#include <stdio.h>
#include <string.h>
int
main (int argc, char **argv)
{
char *str1, *str2;
int str1len, str2len;
str1 = argv[1];
str2 = argv[2];
str1len = strlen (str1);
str2len = strlen (str2);
if (str2len > str1len)
{
printf ("false\n");
return 0;
}
char sub1[100];
for (int i = 0; i < str1len - str2len; i++)
{
strncpy (sub1, str1 + i, str2len);
if (strcmp (sub1, str2) == 0)
{
printf ("true\n");
return 0;
}
}
printf ("false\n");
return 0;
}
Понимаете, что я имею в виду?