Harsh9817 Ответов: 3

Я хочу сделать программу калькулятора подстрок на языке C++(вывести все подстроки из строки)


Входной Сигнал Образца:-
abcde

Пример Вывода:-
abcd
право на изменения bcde
азбука
bcd
ЦДО
ab
до н.э.
компакт-диск
один
б
с
д
е

Что я уже пробовал:

Я пробую его на другом компьютере,так что он не находится на моем компьютере,поэтому, пожалуйста, поймите меня и решите его в первую очередь на c++.

F-ES Sitecore

Мы здесь не для того, чтобы делать за тебя уроки.

Harsh9817

мне нужна только логика а не целое program.so пожалуйста,не воспринимайте это как домашнее задание, если да, то вам не нужно этого делать.
Спасибо..

F-ES Sitecore

есть два вложенных цикла, внешний цикл будет идти от 0 до длины строки - 1. внутренний цикл от 1 до длины строки. Во внутреннем цикле получаем количество символов во внутреннем цикле, начиная с позиции внешнего цикла. Таким образом, вы получите подстроку в следующем порядке;

внешний, внутренний (результат)
0, 1 (а)
0, 2 (АВ)
..
0, 5 (abcde)
1, 1 (b)
1, 2 (до н. э.)
..
1, 4 (bcde)
2, 1 (c)
.. прием

Это должно повторять все возможные комбинации.

3 Ответов

Рейтинг:
25

OriginalGriff

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

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.


Harsh9817

Спасибо за ваше решение...

OriginalGriff

Всегда пожалуйста!

CPallini

Против сбалансированный. :-)

Рейтинг:
2

Patrice T

Цитата:
Я пробую его на другом компьютере,так что он не находится на моем компьютере,поэтому, пожалуйста, поймите меня и решите его в первую очередь на c++.

Нет, мы не решаем ее за вас, потому что вы никогда не научитесь таким образом.
Это так же эффективно, как пытаться получить водительские права, имея кого-то другого, обучающего вас, потому что вы никогда раньше не водили машину.
Принятие полного решения о раздутии от кого-то обернется против вас, потому что следующая домашняя работа будет более сложной, и вы все равно ничего не решите сами.

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


Рейтинг:
12

CPallini

Ключом к решению такого рода задач является рекурсия:
Рекурсивное решение:

#include <iostream>
using namespace std;

void process( const string & s, size_t len)
{
  const size_t Length = s.length();

  if ( len < 1) return;

  for (size_t n = 0; n < (Length - len +1); ++n)
  {
    cout << s.substr(n, len) << endl;
  }
  process( s, len-1); //<- here the recursive call
}

int main()
{
  string s = "abcde";
  process(s, s.length()-1);
}

Как Stefan_Lang правильно указал. Ключом к решению такой задачи является не рекурсия. Итеративное решение так же просто:
#include <iostream>
using namespace std;

void process( const string & s, size_t len)
{ 
  const size_t Length = s.length();
  
  if ( len < 1) return;
  
  for (size_t n = 0; n < (Length - len +1); ++n)
  { 
    cout << s.substr(n, len) << endl;
  }
}

int main()
{
  string s = "abcde";
  for ( size_t len = s.length()-1; len >0; --len)
    process(s, len);
}


Stefan_Lang

Почему рекурсия? Вы можете просто вызвать процесс в цикле:
для (size_t в Лен = С. Длина (м)-1; лен &ГТ; 0; --лен)
процесс(ы, лен);

CPallini

- Ты совершенно прав, Стефан, - поправил я его. На самом деле я сначала решил совершенно другую проблему (я неправильно понял требования OP) рекурсивно и слепо сохранил рекурсивный подход к реальной проблеме. Спасибо, что указали на это.

Harsh9817

Спасибо...

CPallini

Добро пожаловать. Как отметил Стефан, рекурсия вообще не нужна. Смотрите мое обновленное решение.

Harsh9817

да, вы правы...

Harsh9817

Продолжайте вдохновлять меня таким образом, чтобы я мог продолжить свой анализ подобных проблем..

Harsh9817

Еще одна проблема, над которой я все еще работаю, будет обсуждаться через 2 часа... будьте готовы, ребята...

Maciej Los

5ed!

CPallini

Большое тебе спасибо, Мацей.