• Программа на языке C++

    Даны две строки типа string: substr; str.

    Символы в строках - маленькие латинские буквы.

    Требуется определить количество вхождений строки substr в строку str.

    Количество вхождений вывести в переменной cnt.

    Примеры:

    qwe wqeeqeweqweewq

    //1

    eqe wqeeqeweqweewq

    //1

    w wqqewewqeewq

    //4

    d wqeeqe

    //0

    qweweqw qweweqwq

    //1

Ответы 7

  • for (size_t i = 0; i < str.length()-substr.length(); i++)В этой строчке добавьте +1for (size_t i = 0; i < str.length()-substr.length()+1; i++) вот так
    • Автор:

      belén48
    • 6 лет назад
    • 0
  • И попробуй те у меня заработало с q qqq
  • Сейчас отлично, все работает. Только перед первым циклом for стоит добавить проверку if (str.length()>=substr.length()) т.к. данный алгоритм работает только при таком условии, иначе будет ошибка.
    • Автор:

      kenyaclyv
    • 6 лет назад
    • 0
  • Этого мне не сказали учитывать, ну все равно потом в будущем буду спрашивать :)
  • Кстати, один последний вопрос. Зачем подключать директорию string, если она автоматически включена в iosream
    • Автор:

      ireneo
    • 6 лет назад
    • 0
  • #include <iostream>

    #include <string>

    using namespace std;

    int main()

    {

    int cnt = 0;

    string substr, str;

    cin >> substr >> str;

    for (size_t i = 0; i < str.length()-substr.length()+1; i++)

    {

     for (size_t j = 0; j < substr.length(); j++)

     {

      if (str[i+j] != substr[j])

      {

       break;

      }

      else

      {

       if (j == substr.length() - 1) ++cnt;

      }

     }

    }

    cout << cnt;

    return 0;

    }

    Все тесты которые ты написал, отработали.

  • #include <iostream>

    #include <string>

    using namespace std;

    int main()

    {

       string str,sub;

       int cnt=0;

       cout<<"substr: "; cin>>sub;  

       cout<<"str: "; cin>>str;

       int i=0,j=0;  

       while (i<str.length()) {

         while ((str[i]!=sub[j]) && (i<str.length())) i++;

         if (i<str.length()) {

             while ((str[i]==sub[j]) && (i<str.length()) && (j<sub.length())) {

                  i++; j++;

             }

             if (j==sub.length()) cnt++;

             j=0;

         }

       }

       cout<<cnt<<endl;

       system("pause");      

       return 0;

    }

    • Автор:

      dario89
    • 6 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years