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

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

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

Это указатель? На что? Как он работает и соответственно функция? - C++

20.11.2014, 17:10. Просмотров 252. Ответов 9
Метки нет (Все метки)

Программа поиска подстроки в заданной строке. В случае нахождения заданной подстроки необходимо удалить ее.
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <cstring.h>
//---------------------------------------------------------------------------
deleted (char *s, int begin, int length)
{
   while (
            *(s + begin++ -1) = *(s+begin+length-1)
          );
}
 
int main()
{
 char str1[64], str2[32];
cout<<"Input 1st string: ";
cin>>str1;
cout<<"Input 2st string: ";
cin>>str2;
 
if (strstr(str1,str2)==0) cout<<"Podstroka otsutstvuet\n";
else {
       deleted (str1,strcspn(str1,str2)+1,StrLen(str2));
       cout<<str1<<"\n";
      }
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Программа работает правильно. Только знакомлюсь со средой С++ да и вообще с программированием. Не могу понять работу функции deleted, а конкретно что такое char*s, и соответсвенно *(s + begin++ -1) = *(s+begin+length-1).
Миниатюры
Это указатель? На что? Как он работает и соответственно функция?  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2014, 17:10     Это указатель? На что? Как он работает и соответственно функция?
Посмотрите здесь:

Как работает указатель this? C++
Возвращаемое значение функции - указатель на массив. КАК это записать? C++
C++ Почему функция не работает с чарами? Это из-за недостатка памяти?
C++ Как работает функция insert(то есть что надо отправлять что бы строка s вставлялась в строку s1)?
Функция поиска подстроки в строке. Как вернуть указатель? C++
Функция printf () как это работает C++
C++ Как функция возвращает указатель на структуру в массив указателей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
20.11.2014, 17:21     Это указатель? На что? Как он работает и соответственно функция? #2
Цитата Сообщение от zer4 Посмотреть сообщение
конкретно что такое char*s
указатель на переменную типа char

Цитата Сообщение от zer4 Посмотреть сообщение
*(s + begin++ -1) = *(s+begin+length-1).
* - разыменовывание указателя(взять содержимое по этому адресу, в данном случае конкретный символ)
begin++ - постинкремент, на каждой иттерации увеличивает значение begin на единицу, а в остально думаю операции + и = Вам известны...
nmcf
4767 / 4105 / 1371
Регистрация: 14.04.2014
Сообщений: 16,118
20.11.2014, 17:22     Это указатель? На что? Как он работает и соответственно функция? #3
Арифметика указателей. Это
C++
1
*(s + begin++ -1)
то же, что и
C++
1
s[begin++ -1]
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
20.11.2014, 17:24     Это указатель? На что? Как он работает и соответственно функция? #4
Цитата Сообщение от aLarman Посмотреть сообщение
*(s + begin++ -1) = *(s+begin+length-1).
ну вообще говоря суть выражения, такая, начиная с позиции begin-1 в массиве символов пока begin+length-1 не будет равен нулю, копировать значения символа из позиции begin+length-1 в позицию begin-1

Добавлено через 51 секунду
простыми словами означает вырезать часть между begin и begin+length
zer4
0 / 0 / 0
Регистрация: 25.07.2010
Сообщений: 40
20.11.2014, 18:41  [ТС]     Это указатель? На что? Как он работает и соответственно функция? #5
Спасибо

Добавлено через 35 минут
Цитата Сообщение от aLarman Посмотреть сообщение
пока begin+length-1 не будет равен нулю,
Откуда это условие?
MrGluck
Ворчун
Эксперт CЭксперт С++
6414 / 3612 / 448
Регистрация: 29.11.2010
Сообщений: 9,541
20.11.2014, 18:53     Это указатель? На что? Как он работает и соответственно функция? #6
Цитата Сообщение от zer4 Посмотреть сообщение
Откуда это условие?
Это side-effect. Выражение истинно пока в *(s + begin++ -1) не запишется NULL(nullptr).
Сокращённая запись такой конструкции
C++
1
while ((*(s + begin++ -1) = *(s+begin+length-1)) != nullptr);
zer4
0 / 0 / 0
Регистрация: 25.07.2010
Сообщений: 40
20.11.2014, 18:59  [ТС]     Это указатель? На что? Как он работает и соответственно функция? #7
Так у нас *(s + begin++ -1) постоянно увеличивается, как там ноль будет?
zer4
0 / 0 / 0
Регистрация: 25.07.2010
Сообщений: 40
20.11.2014, 19:05  [ТС]     Это указатель? На что? Как он работает и соответственно функция? #8
В моем примере тогда так цикл while работает получается?
Изображения
 
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
20.11.2014, 22:48     Это указатель? На что? Как он работает и соответственно функция? #9
Цитата Сообщение от MrGluck Посмотреть сообщение
Выражение истинно пока в *(s + begin++ -1) не запишется NULL(nullptr).
нене, так то оператора не для указателя вызывается, а для символа, ожидается символ \0 - окончания строки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2014, 00:02     Это указатель? На что? Как он работает и соответственно функция?
Еще ссылки по теме:

Как работает нулевой указатель? C++
Не работает динамический массив в классе: что раньше, указатель или размер? C++
что за возвращаемый тип, и как работает функция? C++
Как работает указатель this C++
C++ Как узнать, что заданная переменная - это указатель?

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт CЭксперт С++
6414 / 3612 / 448
Регистрация: 29.11.2010
Сообщений: 9,541
21.11.2014, 00:02     Это указатель? На что? Как он работает и соответственно функция? #10
Цитата Сообщение от aLarman Посмотреть сообщение
нене, так то оператора не для указателя вызывается, а для символа, ожидается символ \0 - окончания строки
Всё верно, прошу прощения. Со строками действительно ожидает '\0'
Yandex
Объявления
21.11.2014, 00:02     Это указатель? На что? Как он работает и соответственно функция?
Ответ Создать тему
Опции темы

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