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

z функция - C++

Восстановить пароль Регистрация
 
Alpi
104 / 0 / 1
Регистрация: 16.11.2012
Сообщений: 41
29.11.2012, 21:21     z функция #1
Добрый вечер,

вот такая проблема.
Пытаюсь реализовать расчет 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;
int main ()
{
    
    int i = 0, l = 0, r = 0;
    string t;
    string s0;
    string s;
    
    ifstream file("/Users/alex/Downloads/1.txt");
    if (!file.is_open()) cout << "Error!" << endl;
    else
    { char name_string[100];
            while (true)
            {
                file.getline(name_string, 1001);
                if (file.eof() ) break;
                t = name_string;
            }
        s0 = name_string;
        file.close();
        s = s0 + '@' + t;
        int q = s.length();
        cout << q << '\n' << s; // здесь выводит q но вылетает на выводе s
        int z[200]; // как длину массива сделать такую же, как длина строки s?
        cout << z;
        for (i = 1, i < q; i++; )
        {
            if (i < r)
            {
                if ((i - r) < (i - l))
                {z[i] = i - r + 1;}
                else
                    z[i] = l - r;
            }
            while (i < q && s[z[i]] == s[z[i-l]] ) {
                ++z[i];
            }
            if (i + z[i] - 1 > r)
            {
                l = i;
                r = i + z[i] - 1;
            }
        
        }
        
        
    return 0;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2012, 21:21     z функция
Посмотрите здесь:

C++ Функция...
функция C++
функция от f(x) C++
C++ Функция
Функция в с++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alpi
104 / 0 / 1
Регистрация: 16.11.2012
Сообщений: 41
29.11.2012, 22:26  [ТС]     z функция #2
код компилируется, но в итоге выдает ошибку, скриншот во вложении
Миниатюры
z функция  
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
29.11.2012, 22:36     z функция #3
Цитата Сообщение от Alpi Посмотреть сообщение
И еще вопрос: длину массива нельзя объявить переменной.
Какого массива?

Добавлено через 57 секунд
Цитата Сообщение от Alpi Посмотреть сообщение
int z[200]; // как длину массива сделать такую же, как длина строки s?
Использовать вектор.
Alpi
104 / 0 / 1
Регистрация: 16.11.2012
Сообщений: 41
29.11.2012, 22:37  [ТС]     z функция #4
go, любого, в книжке написано так...

Добавлено через 43 секунды
Цитата Сообщение от go Посмотреть сообщение
Использовать вектор.
ОК, я погуглю.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,040
29.11.2012, 22:41     z функция #5
Цитата Сообщение от Alpi Посмотреть сообщение
C++
1
ifstream file("/Users/alex/Downloads/1.txt");
/вот ето в строке в С(С++) служебный символ
посему чтобы получить /Users/alex/Downloads/1.txt писать надо так
C++
1
ifstream file("//Users//alex//Downloads//1.txt");
Alpi
104 / 0 / 1
Регистрация: 16.11.2012
Сообщений: 41
29.11.2012, 23:06  [ТС]     z функция #6
ValeryS,
У меня всегда работали оба варианта. Сейчас поменял / на // - все равно ошибка как на скриншоте.

Добавлено через 3 минуты
Господа, попробуйте у себя код выполнить, может, глук XCode? Он глючный иногда...

Файл для чтения во вложении
Вложения
Тип файла: txt 1.txt (16 байт, 8 просмотров)
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
29.11.2012, 23:43     z функция #7
Цитата Сообщение от Alpi Посмотреть сообщение
Господа, попробуйте у себя код выполнить, может, глук XCode? Он глючный иногда...
Вот онлайн компилятор. http://ideone.com/
Ну или установите на виртуалку ОС какую-нибудь. Можно даже винду.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 13:47     z функция
Еще ссылки по теме:

Функция С++ C++
Функция C++
Функция try C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Alpi
104 / 0 / 1
Регистрация: 16.11.2012
Сообщений: 41
30.11.2012, 13:47  [ТС]     z функция #8
Я переписал заново с вектором.

Но в вектор почему-то ничего не попадает.
Где нарушена логика?

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
 
int main ()
{
    
    int i = 1;
    int l = 0;
    int r = 0;
    string t;
    string s0;
    string s;
    ifstream file("/Users/alex/Downloads/1.txt");
    if (!file.is_open()) cout << "Error!" << endl;
    else
    { char name_string[1001];
        while (true)
        {
            file.getline(name_string, 1001);
            if (file.eof() ) break;//Если считан конец файл, то выход из цикла
            t = name_string;
        }
        s0 = name_string;
        file.close();
        s = s0 + '@' + t;
        int q = s.length();
        //cout << q << '\n' << s;
        vector<int> z(q);
        while (i < q)
        {
            if (i < r)
            {
                if ((i - r) < (i - l))
                {z[i] = i - r + 1;}
                else
                    z[i] = l - r;
            }
            while (i < q && s[z[i]] == s[z[i-l]] )
            {
                ++z[i];
            }
            if (i + z[i] - 1 > r)
            {
                l = i;
                r = i + z[i] - 1;
            }
            ++i;
        }
    }
  
    return 0;
}
Добавлено через 13 часов 51 минуту
Ответьте, пожалуйста, где ошибка...
Yandex
Объявления
30.11.2012, 13:47     z функция
Ответ Создать тему
Опции темы

Текущее время: 04:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru