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

не заполняется вектор - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ С++ классы visual studio http://www.cyberforum.ru/cpp-beginners/thread714567.html
помогите реализовать сумму даты и определенного количества дней. например 3.10.2012+390=28.10.2013 високосный год не учитывать наработки есть void Date::summa() { int s,t; int...
C++ Одномерный массив и функции (сделать 3 функции ввода/решения/вывода) Ребята помогите, хоть убейте не могу эту задачу с помощью функций сделать!( Нужно сделать 3 функции ввода/решения/вывода. Кому не сложно помогите лузеру...Программирование тяжело очень дается((... http://www.cyberforum.ru/cpp-beginners/thread714559.html
Инициализация структуры через точку C++
Доброго юзаю MVS2012 Проблема есть структура struct ST { int a; int b; };
C++ Разработка программ содержащих функции
При передаче по значению в принимающую функцию передается не сама переменная-параметр, а только ее значение – копия. Это уже не одна переменная, а, фактически, две. Первая является локальной по...
C++ Поиск минимального элемента на отрезке http://www.cyberforum.ru/cpp-beginners/thread714536.html
Дана последовательность n целых чисел a1, a2, ..., an, которые в процессе работы могут изменяться. Требуется написать программу, умеющую быстро находить минимум на отрезке от i до j, то есть min(ai,...
C++ Механизм прерывания ввода Ребят, передо мной стоит задание написать функцию, которая принимает в качестве аргумента структуру, а возвращает целое значение. Данная функция должна предлагать пользователю ввести данные... подробнее

Показать сообщение отдельно
Alpi
104 / 0 / 1
Регистрация: 16.11.2012
Сообщений: 41
01.12.2012, 15:16  [ТС]
Toshkarik, спасибо за помощь, действительно. Я почитал еще раз объяснение и т.п.
Тем не менее,
я немного поправил, но функция все равно не считается, т.е. в массиве z содержатся только нули. Но она обязана прирастать, я на желтом листочке в клеточку проверил...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
#include <cstdlib>
 
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
int main ()
{
    char s[17] = "abcdabcabcdfghab";
    int z[17] = {0};
    for  (int i=1, l=0, r=0; i < 17; ++i)
        {
            if (i < r || i == r)
            {
                z[i] = min (r-i+1, z[i-l]);
            }
            while (i + z[i] < 17 && s[z[i]] == s[i+z[i]])
            {
                z[i]+=1;
            }
            if (i + z[i] - 1 > r)
            {
                l = i;
                r = i + z[i] - 1;
            }
            ++i;
 
        }
    cout << z[6];
        return 0;}
Добавлено через 24 минуты
Заработало вот так:
Вроде вывод правильный.

Всем спасибо большое, это был ценный опыт.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int main ()
{
    char s[17] = "abcdabcabcdfghab";
    int z[17] = {0};
    for  (int i=0, l=0, r=0; i < 17; ++i)
        {
            if (i < r || i == r)
            {
                z[i] = min (r-i+1, z[i-l]);
            }
            while (i + z[i] < 17 && s[z[i]] == s[i+z[i]])
            {
                ++z[i];
            }
            if (i + z[i] - 1 > r)
            {
                l = i;
                r = i + z[i] - 1;
            }
            cout << i << " "<< z[i] << ' ' << endl;
           
 
        }
    
        return 0;}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru