Контролирует, присутствует ли строка в другой строке (в C )

#c #string

#c #строка

Вопрос:

Как я могу определить, содержит ли данная строка полностью другую подстроку?
Я не ограничен в библиотеках и функциях, которые я могу использовать, мне просто нужно самое простое из возможных решений этой проблемы.

Примеры с некоторыми входными данными:

 string str1 = "helloworld"; //master string
string str2 = "low"; //substring
std::cout << contains(str1, str2); //should print True, "low" is in "helloworld"
  
 string str1 = "hello-world"; //master string
string str2 = "low"; //substring
std::cout << contains(str1, str2); //should print False, "low" is NOT present in "hello-world"
  

Комментарии:

1. Проверьте эту функцию: cplusplus.com/reference/string/string/find

2. Приведенная выше функция — абсолютно правильная вещь для использования в «реальном» коде, но если вам требуется написать это самостоятельно, подумайте об этом следующим образом: сначала напишите функцию, чтобы проверить, существует ли подстрока в определенной позиции в более длинной строке, затем выполните цикл по более длинной строке, выполнив эту проверку.

3. Если по какой-то странной причине вы не должны использовать std::string , тогда вам нужно написать несколько вложенных циклов for. Внешний цикл перебирает все позиции в вашей более крупной строке, а ваш внутренний цикл проверяет, начинается ли более короткая строка с этой позиции. На самом деле вы должны попробовать и сделать это для себя, это единственный реальный способ научиться.

4. что вы пробовали? с какими проблемами вы столкнулись? мы не собираемся делать вашу домашнюю работу, но если у вас есть конкретная проблема, вы можете получить ответ

5. Спасибо @Blaze, это помогло! Что касается остальных: я могу использовать что угодно, я ни в каком смысле не ограничен. И я не хочу, чтобы вы делали мою домашнюю работу, я просто редко использую c .-. Спасибо за помощь, кстати

Ответ №1:

 #include <iostream>
#include <string.h>

using namespace std;

bool contains(char *sub, char *whole);

int main(void)
{
    char sub[]  = "hello";
    char sub2[] = "hey";

    char whole[]= "well hello world";

    if(contains(sub, whole))
        cout << "it does" << endl;
    else
        cout << "it does not" << endl;

    if(contains(sub2, whole))
        cout << "it does" << endl;
    else
        cout << "it does not" << endl;

    return 0;
}

bool contains(char *sub, char *whole)
{
    for(int i=0 ; i<strlen(whole) ; i  )
    {
        bool match=true;
        for(int j=0 ; j<strlen(sub) ; j  )
        {
            if(sub[j] != whole[j i])
                match = false;
        }
        if(match)
            return true;
    }

    return false;
}
  

Комментарии:

1. Довольно запутанная функция, но она работает, поэтому я думаю, что буду придерживаться ее. Спасибо!