длина подпоследовательности в строке - PullRequest
1 голос
/ 01 ноября 2011

Мне нужно реализовать функцию lastSeq, которая получает в качестве аргумента string str и char chr и возвращает длину последней повторяемой последовательности chr (последовательность может быть любой длины), например: lastSeq("abbaabbbbacd",'a')должен возвращать 1
lastSeq("abbaabbbbacd",'b') должен возвращать 4 lastSeq("abbaabbbbacd",'t') должен возвращать 0

Есть ли функция C ++, которая может ее решить?

Ответы [ 2 ]

6 голосов
/ 01 ноября 2011

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

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

К этому моменту у вас должен быть грубый алгоритм для решения проблемы.Что вы знаете о хранении строки в C ++ и методе, доступном из этого класса?Можно ли использовать их для решения некоторых этапов вашего алгоритма?

Попробуйте написать программу с использованием этой функции, скомпилировать и запустить ее.Получаете ли вы ожидаемый результат?Если нет, можете ли вы попытаться напечатать промежуточное состояние (используя std::cout << "Some value: " << variable << "\n";), чтобы попытаться отладить его.

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

1 голос
/ 03 ноября 2011
int lastSeq(char *str, char chr)  
{  
    int i = strlen(str);  
    int l = 0;  

    while(--i>=0)  
       if(*(str + i) == chr && ++l)  
          break;

    while(--i>=0 && chr == *(str + i) && ++l);  

    return l;  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...