Я вижу две проблемы с вашим кодом, вашей findString()
функцией и вашей main()
функцией.Программируя тест, давайте сначала разберемся с вашей main()
функцией.Предполагается, что findString()
возвращает строку, но не возвращает - int
.Итак, нам нужно что-то вроде:
int main(int argc, char const *argv[])
{
char *string = "a chatterbox";
int index = findString(string, "hat");
if (index != -1)
{
printf("%s\n", string + index);
}
return 0;
}
Теперь обратимся к вашей findString()
функции, как правильно заметили @FredK и @Barmar, это не правильно:
if(motherArgument[i] == childArgument[i])
Но смотреть дальшевот что это значит:
freq++; // frequency
Ничто в вашей спецификации проблемы не упоминает счетчик частоты.Затем есть переменная flag
, для которой вы include <stdbool.h>
и в любом случае объявляете ее int
.Кажется, для управления печатью, которой нет в спецификации.Наконец, вы возвращаете -1
в случае неудачи, но не возвращаете ничего явно в случае успеха!
Давайте попробуем минимальную и слегка нарушенную реализацию findString()
:
int findString(const char *string, const char *substring)
{
for (int i = 0; i < strlen(string); i++)
{
if (strncmp(string + i, substring, strlen(substring)) == 0)
{
return i;
}
}
return -1;
}
Шансытеперь вы скажете нам, что вам не разрешено использовать strncmp()
.В любом случае, теперь у вас есть базовая модель взаимодействия этих подпрограмм и заполнения кода по мере необходимости.Наряду с обычной отладкой и тестированием, задайте себе вопросы при программировании:
Что если одна или обе строки аргумента являются пустой строкой?Или такая же строка?Что происходит, если подстрока длиннее строки?Правильны ли наши ограничения цикла или мы можем сделать лучше?
Сначала решите, что должно произойти в любом из этих случаев, а затем убедитесь, что ваш код работает правильно.