Предмет: Информатика, автор: MrMiner1

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

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

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

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

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

Примеры:

qwe wqeeqeweqweewq

//1

eqe wqeeqeweqweewq

//1

w wqqewewqeewq

//4

d wqeeqe

//0

qweweqw qweweqwq

//1

Ответы

Автор ответа: fefemf10
1

#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;

}

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


MrMiner1: Сейчас провел дополнительный тест. q qqq. Ответом является число два, при очевидном требуемом 3
MrMiner1: Сейчас отлично, все работает. Только перед первым циклом for стоит добавить проверку if (str.length()>=substr.length()) т.к. данный алгоритм работает только при таком условии, иначе будет ошибка.
MrMiner1: Кстати, один последний вопрос. Зачем подключать директорию string, если она автоматически включена в iosream
Автор ответа: srzontmp
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;

}


Похожие вопросы
Предмет: Математика, автор: Аноним
Предмет: Математика, автор: svirtov