#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. Довольно запутанная функция, но она работает, поэтому я думаю, что буду придерживаться ее. Спасибо!