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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Нач_физик
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 49
#1

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

11.11.2011, 22:06. Просмотров 370. Ответов 5
Метки нет (Все метки)

код взял тут Алгоритм Хоспула
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++
Почему в не которых функциях к елементам структуры обращаются *invtry , а в других просто invtry? #include &lt;stdafx.h&gt; #include...

Что то в 14 строке не так?Как можно перезаписать? - C++
Что то в 14 строке не так?Как можно перезаписать? #include&lt;iostream&gt; #include&lt;cstdlib&gt; #include &lt;cmath&gt; #include &lt;clocale&gt; ...

Можно ли значения двумерного динамического массива присвоить обыкновенному двумерному массиву? - C++
Столкнулся с проблемой с динамическими массивами, можно ли значения двумерного динамического массива присвоить обыкновенному двумерному...

Thread: можно ли делать так, как в заданном коде и если нет, то почему? - C++
Всем привет. можно ли так делать? Если нет то почему. Спасибо. #include &lt;iostream&gt; #include &lt;thread&gt; #include &lt;chrono&gt; class...

Как сделать так, чтобы можно было вводить Имя Фамилию с пробелом - C++
Как сделать так, чтобы можно было вводить Имя Фамилию с пробелом и почту? struct mas { char name; char email; }; class x...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
Каратель
Эксперт С++
6553 / 3973 / 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
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.11.2011, 22:37 #6
http://ru.wikipedia.org/wiki/ASCII
это всего лишь число
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2011, 22:37
Привет! Вот еще темы с ответами:

Расположить почтовые ящики так, чтобы народу на один было как можно меньше - C++
Дано N городов и Y почтовых ящиков, а также население. Нужно расположить почтовые ящики так, чтобы народу на 1 было как можно меньше(т.е...

Как создать файл DLL так, чтобы его можно было подключить к VBA Excel? - C++
Пытаясь научиться подключать к VBA хотя бы самую тривиальную функцию на C++. Для примера написал на C++ простую функцию Kvadrat и...

С помощью какого кода можно запустить как либо файл по локальной сети, и так-же на своём компе - C++
Всем доброго времени суток. У меня несколько вопросов. 1. С помощью какого кода можно запустить как либо файл по локальной сети, и...

как сделать так, чтоб при работе программы можно было вводить в качестве данных русские слова? - C++
мммм?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.11.2011, 22:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru