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

Как можно ТАК обащаться к массиву? - C++

Восстановить пароль Регистрация
 
Нач_физик
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 49
11.11.2011, 22:06     Как можно ТАК обащаться к массиву? #1
код взял тут Алгоритм Хоспула
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
#include <iostream>
#include <string>
using namespace std;
 
int HorspoolMatch(string T,string P)
{       
        int n=T.length();
        int m=P.length();
        int Slide[256];
        for(int i=0; i<256; ++i)
                Slide[i]=m;
        for(int l=0; l<m; ++l)
                Slide[P[l]] = m - l - 1;
 
        int k=0;
        while(k < n - m + 1)
        {
                for(int i=0; i<m; i++)
                {
                        if(T[k+i]!=P[i])
                                break;
                        if(i==m-1)
                                return k;
                }
                k += Slide[T[k+m-1]];
        }
        return -1;
}
 
void main()
{
        setlocale (LC_ALL, "Russian");
        
        string T="";//строка, в которой ищем
        string P="";//строка, которую ищем
        string S="";//строка,для создания случайных символов,которые добавляются потом в строки T и P
        //генерируем строки
        for(int i=0; i<1000000;i++)
        {
                S=rand();
                T.append(S);
                if(i>1 && i<5)
                {
                        P.append(S);
                }
        }
 
        cout << "Алгоритм Хорспула: " << HorspoolMatch(T,P) <<  endl;
        
}
собственно говоря не понимаю принцип работы строки 14
C++
1
Slide[P[l]] = m - l - 1;
P[l]- возвращает символ на позиции l ?
Ну или ссылку на символ в позиции l, ну а дальше то что- Slide[символ] - бред какой то, но ведь работает же - объясните пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2011, 22:06     Как можно ТАК обащаться к массиву?
Посмотрите здесь:

С помощью какого кода можно запустить как либо файл по локальной сети, и так-же на своём компе C++
Найдите сумму всех одиннадцати простых чисел, которые можно укорачивать как слева направо, так и справа налево. C++
C++ как сделать так, чтоб при работе программы можно было вводить в качестве данных русские слова?
как можно откопилировать программу на C++ так, чтобы получить "чистый бинарный файл"? C++
C++ Можно ли значения двумерного динамического массива присвоить обыкновенному двумерному массиву?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2011, 22:09     Как можно ТАК обащаться к массиву? #2
Нач_физик, Символы - не более чем ASCII коды в данном случае... То есть цифры. На вопрос ответил?
Нач_физик
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 49
11.11.2011, 22:22  [ТС]     Как можно ТАК обащаться к массиву? #3
Ответ в духе "Матрицы"- " Ложки не существует", понятно что в компе все цифры но не получается обратиться к интовскому массиву Slide["а"], да и cout<< P[5]; выведет символ , а не его значение в таблице кодов - разве, что в <iostream> это преобразуется в символы, а Р[5] на самом деле возвращает код символа ? А как проверить это предположение?
пожалуйста более развернуто
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.11.2011, 22:26     Как можно ТАК обащаться к массиву? #4
Цитата Сообщение от Нач_физик Посмотреть сообщение
"а"
это строка, а нужен символ
вот так Slide['а']
Нач_физик
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 49
11.11.2011, 22:35  [ТС]     Как можно ТАК обащаться к массиву? #5
Цитата Сообщение от Jupiter Посмотреть сообщение
это строка, а нужен символ
вот так Slide['а']
Шайтан, однако работает !!!!
Еще больше не понимаю, КАК? и Откуда ВЫ знаете , чего то я не те книги читал, это наверное еще с чистого Си идет?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.11.2011, 22:37     Как можно ТАК обащаться к массиву? #6
http://ru.wikipedia.org/wiki/ASCII
это всего лишь число
Yandex
Объявления
11.11.2011, 22:37     Как можно ТАК обащаться к массиву?
Ответ Создать тему
Опции темы

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