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

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

Войти
Регистрация
Восстановить пароль
 
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
#1

не совсем понимаю код *указатели - C++

17.03.2012, 00:05. Просмотров 517. Ответов 3
Метки нет (Все метки)

изучаю указатели, столкнулся с кодом не совсем могу понять что происходит в функции *g_s,
особенно это условие
C++
1
*p2 && *p2 == *p
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
#include <iostream>
#include <locale>
 
using namespace std;
 
char *g_s(char *sub, char *str);
 
int main ()
{
    setlocale(LC_ALL,"");
    char *substr;
 
    substr = g_s("tri", "odin dva tri 4etire");
 
    cout << "podstroka: " << substr;
        
    return 0;
}
 
char *g_s(char *sub, char *str)
{
    int t;
    char *p, *p2, *start;
 
    for(t=0; str[t]; t++)
    {
        p = &str[t];
        start = p;
        p2 = sub;
        while(*p2 && *p2 == *p)
        {
            p++;
            p2++;
        }
        if (!*p2)
            return start;
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2012, 00:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос не совсем понимаю код *указатели (C++):

Правильно ли я понимаю ссылки и указатели. Работу с ними. Я сам прокомментировал код. Скажите правильно или нет. - C++
#pragma once namespace Casper { class Cat { private: unsigned int age; float weight;

Не совсем понимаю задания - C++
Здравствуйте. Надо мне решить одну задачку, но я не совсем понимаю как должно быть Выходя из объекта-праотца &quot;МНОГОУГОЛЬНИК&quot;(Заданной...

Указатели. Не понимаю - C++
Разбираю указатели, слегка запнулся на одном месте. У меня есть функция: void Dit(int &amp;x) { x *= 2; } Использую я в...

Код работает не совсем корректно со строками - C++
почему-то при любом количестве строк,которое я задаю,он позволяет написать только одну,а потом переходит к следующему пункту и вообще...

Пытаюсь переписать код с циклом for, в код с циклом while, но не совсем получается - C++
Возникло пару вопросов: #include &lt;iostream&gt; using namespace std; int main () { for (int i = 0; i&lt;=10; i++) cout &lt;&lt;...

Не совсем понятно как работает такой код - C++
Есть консольное приложение, которое при работе выводит данные. Непонятно как работает такой код: for (;;) { char option; ...

3
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
17.03.2012, 00:12 #2
вот это условие

Цитата Сообщение от electromind Посмотреть сообщение
*p2 && *p2 == *p
равносильно этому

C++
1
*p2 != NULL && *p2 == *p // так наглядней
0
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
17.03.2012, 00:55  [ТС] #3
C++
1
2
3
4
5
while(*p2 && *p2 == *p)
                {
                        p++;
                        p2++;
                }
вот совсем не понимаю этот цикл... т.е. что он делает
разъясните если не трудно...
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
17.03.2012, 02:25 #4
Цитата Сообщение от electromind Посмотреть сообщение
C++
1
2
while(*p2 && *p2 == *p)
{ p++; p2++; }
Задача не кажется сложной даже для человека в чистом С++ не разбирающегося (меня), по-этому попробую.
p2 и p объявлены указателями на char. Операция * - операция разадресации дающая содержимое памяти (значение) на которое указывает указатель, т.е. в нашем случае - char. Стало быть в логическом блоке оператора цикла while первый символ *p будет неявно преобразован к bool, то есть в случае если операция разадресации пройдет с результатом - нулевой указатель - false, об этом сказал Infinity3000, иначе если арифметический эквивалент (char внутренне - целый тип и легко преобразуется в выражениях где ожидается целое в целое) символа - ноль тоже false, и во всех остальных случаях - true. Другими словами в сочетании с p2++; в теле цикла первое условие перемещает указатель по непрерывной области памяти, пока p2 указывает на char "не равный нулю".
Второе условие сравнивает символы *p2 и *p и пока они совпадают разрешает перемещение указателей p2 и p. Цикл прекратится если p2 указывает не на char или на char преобразуемый к 0, или символы по адресам p2 и p разные (до первого расхождения). Из области фантазий: можно предположить, что строки p2 и p1 могут отличаться (а могут и нет) и ищется позиция символа - где есть первое расхождение. Но могут конечно быть и другие варианты.
0
17.03.2012, 02:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2012, 02:25
Привет! Вот еще темы с ответами:

не понимаю код - C++
прокоментируйте пожалуйста код, я совсем не понимаю что здесь написано или переправьте на более простой само условие: &quot;Задан текст. ...

Не понимаю, как работает код? - C++
int main(int argc, char** argv) //кол-во аргументов, указатель на массив указателей на сами аргументы. { setlocale( LC_ALL ,...

Слишком сложный код программы, ничего не понимаю( - C++
Я искал код по этому заданию: &quot;Имеется картографическая информация, представляющая собой серии пар целых чисел. Диапазон величин этих...

Хочу разбить код на функции, но ничего в них не понимаю - C++
Задача: написать ввод и вывод в отдельных функциях. #include &lt;iostream&gt; using namespace std; int main() { int a; ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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