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

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

Восстановить пароль Регистрация
 
zer4
0 / 0 / 0
Регистрация: 25.07.2010
Сообщений: 38
20.11.2014, 17:10     Это указатель? На что? Как он работает и соответственно функция? #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
//---------------------------------------------------------------------------
 
#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     Это указатель? На что? Как он работает и соответственно функция?
Посмотрите здесь:

C++ скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что?
что за функция такая strstr? или это не функция? C++
Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать? C++
C++ Почему функция не работает с чарами? Это из-за недостатка памяти?
C++ Как работает функция insert(то есть что надо отправлять что бы строка s вставлялась в строку s1)?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 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
4270 / 3701 / 1246
Регистрация: 14.04.2014
Сообщений: 14,495
20.11.2014, 17:22     Это указатель? На что? Как он работает и соответственно функция? #3
Арифметика указателей. Это
C++
1
*(s + begin++ -1)
то же, что и
C++
1
s[begin++ -1]
aLarman
636 / 557 / 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
Сообщений: 38
20.11.2014, 18:41  [ТС]     Это указатель? На что? Как он работает и соответственно функция? #5
Спасибо

Добавлено через 35 минут
Цитата Сообщение от aLarman Посмотреть сообщение
пока begin+length-1 не будет равен нулю,
Откуда это условие?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
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
Сообщений: 38
20.11.2014, 18:59  [ТС]     Это указатель? На что? Как он работает и соответственно функция? #7
Так у нас *(s + begin++ -1) постоянно увеличивается, как там ноль будет?
zer4
0 / 0 / 0
Регистрация: 25.07.2010
Сообщений: 38
20.11.2014, 19:05  [ТС]     Это указатель? На что? Как он работает и соответственно функция? #8
В моем примере тогда так цикл while работает получается?
Изображения
 
aLarman
636 / 557 / 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++
Функция printf () как это работает C++

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

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

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