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

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

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

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

20.11.2014, 17:10. Просмотров 274. Ответов 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).
0
Миниатюры
Это указатель? На что? Как он работает и соответственно функция?  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2014, 17:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Это указатель? На что? Как он работает и соответственно функция? (C++):

Как узнать, что заданная переменная - это указатель? - C++
Здравствуйте, подскажите пожалуйста - Как узнать что, какая то, переменная это указатель? Например: int *p = new int; Как...

Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать? - C++
Подскажите, что значит константный указатель на объект, указатель на константный объект, и как это можно использовать??

Функция printf () как это работает - C++
Здраствуйте Ув. Форумчане. Прошу помочь разобраться с конкретным примером. #include &lt;iostream&gt; #include &lt;stdio.h&gt; float d = 1; ...

Как работает функция insert(то есть что надо отправлять что бы строка s вставлялась в строку s1)? - C++
Добрый день.Подскажите пожалуйста как работает функция insert(то есть что надо отправлять что бы строка s вставлялась в строку s1).Заранее...

Указатель на ссылку или что это такое? - C++
void add(char aData, Branch *&amp;aBranch); Речь об аргументе aBranch. Как это понимать? Указатель на ссылку? Не понятно. Вроде такое не...

что за функция такая strstr? или это не функция? - C++
void search(sp *list){ sp *prt = list; char f,r; cout&lt;&lt;Rus(&quot;введите текст&quot;)&lt;&lt;endl; cin&gt;&gt;f; cout&lt;&lt;Rus(&quot;введите выходной...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
aLarman
642 / 563 / 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 на единицу, а в остально думаю операции + и = Вам известны...
1
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
20.11.2014, 17:22 #3
Арифметика указателей. Это
C++
1
*(s + begin++ -1)
то же, что и
C++
1
s[begin++ -1]
1
aLarman
642 / 563 / 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
1
zer4
0 / 0 / 0
Регистрация: 25.07.2010
Сообщений: 40
20.11.2014, 18:41  [ТС] #5
Спасибо

Добавлено через 35 минут
Цитата Сообщение от aLarman Посмотреть сообщение
пока begin+length-1 не будет равен нулю,
Откуда это условие?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
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);
0
zer4
0 / 0 / 0
Регистрация: 25.07.2010
Сообщений: 40
20.11.2014, 18:59  [ТС] #7
Так у нас *(s + begin++ -1) постоянно увеличивается, как там ноль будет?
0
zer4
0 / 0 / 0
Регистрация: 25.07.2010
Сообщений: 40
20.11.2014, 19:05  [ТС] #8
В моем примере тогда так цикл while работает получается?
0
Изображения
 
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
20.11.2014, 22:48 #9
Цитата Сообщение от MrGluck Посмотреть сообщение
Выражение истинно пока в *(s + begin++ -1) не запишется NULL(nullptr).
нене, так то оператора не для указателя вызывается, а для символа, ожидается символ \0 - окончания строки
1
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
21.11.2014, 00:02 #10
Цитата Сообщение от aLarman Посмотреть сообщение
нене, так то оператора не для указателя вызывается, а для символа, ожидается символ \0 - окончания строки
Всё верно, прошу прощения. Со строками действительно ожидает '\0'
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2014, 00:02
Привет! Вот еще темы с ответами:

Расскажите, как здесь работает указатель на указатель? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; void main() { setlocale(LC_ALL, &quot;rus&quot;); ...

скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? - C++
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? //анализируем все клетки доски for(int i = 0; i &lt; 8;...

что за возвращаемый тип, и как работает функция? - C++
pair&lt;string, string&gt; splitExpression(string expr) { stringstream ss; ss &lt;&lt; expr; pair&lt;string, string&gt; result; getline(ss,...

Почему функция не работает с чарами? Это из-за недостатка памяти? - C++
#include&quot;stdafx.h&quot; #include&lt;stdio.h&gt; template&lt;class T&gt; T min(T a, T b, T c) { if((a&lt;b)&amp;&amp;(a&lt;c)) return(2*a); else { ...


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

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

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