Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Префикс-функция - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ не работает getline http://www.cyberforum.ru/cpp-beginners/thread409875.html
Есть код (писал не я), но не могу понять, почему getline() игнорируется в строке 72. Сначала не работало в функции класса, потом решил сделать так, как в этом коде, но без толку... #include...
C++ Простейший код Нужно написать код который будет менять местами цифры то есть изначально такой порядок int m={1,4,3,6,2} а на выходе обратный порядок 2 6 3 4 1 помогите написать такой код Добавлено через 3... http://www.cyberforum.ru/cpp-beginners/thread409871.html
Ошибка E2040 C++
#include <iostream> using namespace std; class Masiv{ public: int i,x; static int arr; void Zapol1(){ }
Подскажите как с паскаля перевести в С?За ранее спасибо C++
uses crt; var x:array of real; i,j,n,ind:integer; pr,max:real; begin randomize; clrscr; writeln('Введите размерность массива* <= 10'); readln(n); for i:=1 to n do begin for j:=1 to n do
C++ Упорядочить строки матрицы http://www.cyberforum.ru/cpp-beginners/thread409862.html
Вводиться целая матрица размером NxM. Как упорядочить строки матрицы по не убыванию значений первых элементов строк?
C++ замена отрицательных чисел Добрый вечер! Пожалуйста помогите с задачей: во входном файле лежит строка, состоящая из букв, чисел и символов. Ее нужно прочесть и там где в строке начинается число, считать его и проверить... подробнее

Показать сообщение отдельно
kzru_hunter
1090 / 765 / 58
Регистрация: 01.02.2011
Сообщений: 1,779
Записей в блоге: 1
21.12.2011, 14:27
код бредовый по-моему, но рабочий.
не пойму, что делает в нем k = p[k-1];

как я понял, из этого цикла можно выйти только кода k будет равен нулю:
C++
1
2
while ( (k > 0) && (s[k] != s[i]) )
                        k = p[k-1];
потому как я проверял ручным способом и пытался найти такой текст при котором после k = p[k-1]
k все ещё было бы больше нуля и s[k] стало бы равно s[i], что привело бы выходу из цикла. но увы, не удалось,т.к. если, например, в какой-то момент k>0 и попадаем в этот цикл и, например, s[k] = 'H', то после выполнения k = p[k-1], k изменится, но s[k] так и останется равным 'H'.

вот мой код, рабочий, проверял, оказался немножко быстрее, чем на википедии:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
vector<int> compute_prefix_function(const string& s)
{
        int len = s.length();
        vector<int> p(len);
 
        int k = 0; // счетчик
        for(int i = 1; i < len; i++)
        {
                if (s[k] != s[i])
                {
                        // повторная проверка при k = 0
                        if (s[0] != s[i]) k = 0; 
                        else k = 1;
                }
                else
                {
                        k++; // если символы совпадают -> увеличиваем значение счетчика
                }
                p[i] = k; // значение счетчик в вектор
        }
        return p;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru