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

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

Войти
Регистрация
Восстановить пароль
 
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
#1

Объясните пожалуйста, как работает код. Указатели - C++

07.02.2013, 22:05. Просмотров 433. Ответов 6
Метки нет (Все метки)

Если не сложно, напишите пожалуйста комметнтарии к каждой строке. Никак не могу разобраться. Программа разделяет строку на слова.
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
#include "stdafx.h"
#include <iostream>
#include <cstdio>
using namespace std;
 
int main()
{ setlocale (0,"rus");
  char str[80];
  char token[80];
  char *p, *q;
 
  cout << "Введите строку: ";
  gets_s(str);
 
  cout << "По словам: \n";
  p = str; 
 
 
  while(*p) { 
    q = token;  
   
    while(*p!=' ' && *p) {
      *q = *p;   
       q++; p++; 
    }
    if(*p) p++; 
    *q = '\0'; 
    cout << token << '\n';
  }
 
  system ("pause");
  return 0;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 22:05     Объясните пожалуйста, как работает код. Указатели
Посмотрите здесь:

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

Объясните пожалуйста как работает программа - C++
объясните пожалуйста код с момента появления &quot;bool fl&quot;, как это вообще работает? #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include...

Объясните пожалуйста как работает эта сортировка - C++
Я не совсем понимаю что происходит с вектором #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; ...

Объясните как работает код - C++
можете подробно объяснить как работают программы. 1 #include&lt;iostream&gt; #include&lt;cmath&gt; using namespace std; int main() ...

Объясните как работает код (pacman) - C++
Странный вопрос но я не очень понимаю как работает код ниже, скажите как он работает и лучше объясните алгоритм передвижения призрака (это...

Объясните, как работает код - циклы - C++
// showprim.cpp // displays prime number distribution #include &lt;iostream&gt; using namespace std; #include &lt;conio.h&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
07.02.2013, 22:42     Объясните пожалуйста, как работает код. Указатели #2
C++
1
#include "stdafx.h"
Visual C++ что ли?

C++
1
2
3
 char str[80];
  char token[80];
  char *p, *q;
автору С вспомнился... есть ещё inline вставки в ассемблере, рекомендую...

C++
1
gets_s(str);
ещё лучше

system ("pause");
нет в unix такой команды(

это что за книга такая? где так учат?
разделять текст по словам в С++ приблизительно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
vector<string> split(const string& str)
{
    typedef string::const_iterator iter;
    vector<string> ret;
 
    iter i = str.begin();
    while (i != str.end()) {
 
        // пропускаем пробелы (или символы подобные ему)
        i = find_if(i, str.end(), not_space);
 
        // находим следующий пробел после этого слова
        iter j = find_if(i, str.end(), space);
 
        // добавляем слово в выходной контейнер слов
        if (i != str.end())
            ret.push_back(string(i, j));
        i = j;
    }
    return ret;
}
Winhttp
60 / 60 / 0
Регистрация: 05.01.2013
Сообщений: 235
07.02.2013, 22:48     Объясните пожалуйста, как работает код. Указатели #3
C++
1
char *p, *q;
а я слышал, что нельзя обьявлять вот так указатели без инициализации. или можно?
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
07.02.2013, 22:54     Объясните пожалуйста, как работает код. Указатели #4
Цитата Сообщение от Winhttp Посмотреть сообщение
а я слышал, что нельзя обьявлять вот так указатели без инициализации. или можно?
можно, они просто будут указывать в неизвестность (точнее там будет хлам оперативки записан вместо адреса)
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
07.02.2013, 22:55  [ТС]     Объясните пожалуйста, как работает код. Указатели #5
abit,
Книга Герберт Шилдт "С++ базовый курс". Спасибо за ответ, но цель у меня не является решить задачу. Я хочу разобрать использование указателей.
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
07.02.2013, 23:35     Объясните пожалуйста, как работает код. Указатели #6
Цитата Сообщение от delexa Посмотреть сообщение
abit,
Книга Герберт Шилдт "С++ базовый курс". Спасибо за ответ, но цель у меня не является решить задачу. Я хочу разобрать использование указателей.
ну я думаю, что указатели это не та тема, с которой надо начинать, но ладно, раз так необходимо, я понимаю... я в своё время крутил record в pascal до посинения, не понимая многого...

я тогда откину ненужные конструкции, оставлю одни операции с указателями:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  char *p, *q;        // объявляются два указателя в неизвестность
 
  p = str;             // первый из них (p) указывается на str ( str тоже указатель, только константный, т.к. указывает
                         // на одну и ту же область памяти - где храниться строка, с этого момента p есть синоним str
                         // т.е. символ p[1] соответствует str[1]
 
 
  while(*p) {       // тут делается цикл, до тех пор пока содержимое по адресу этого указателя не вернёт \0
                       //  а любая ASCIIZ строка заканчивается символом \0
    q = token;     // по аналогии закидываем в q константый указатель token
   
    while(*p!=' ' && *p) { // новый цикл... пока не дошли до пробела либо до конца строки   
      *q = *p;                 // переместим символ по адресу q в адрес p
       q++; p++;            // прибавим оба адреса, но вообще всю эту конструкцию можно заменить
                                  // на *q++ = *p++;
    }
    if(*p) p++;              // если не встретился конец строки - прибавим указатель
    *q = '\0';                // а в q кинем конец строки, т.к. слово закончено
    cout << token << '\n'; // отправим готовое слово в выходной поток, переведём каретку
  }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2013, 13:15     Объясните пожалуйста, как работает код. Указатели
Еще ссылки по теме:

Объясните пожалуйста код - C++
#include &lt;iostream&gt; template &lt;typename T&gt; struct NameOf {}; #define DEF_TYPENAME(type) template &lt;&gt; \ struct NameOf&lt;type&gt; {\ ...

объясните пожалуйста код - C++
объясните пожалуйста код, желательно каждую строчку пояснить #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;sstream&gt; #include...

объясните, пожалуйста, код - C++
есть программа, но не до конца понятно, что она делает... #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; #include...

Объясните код пожалуйста - C++
FILE* fp = NULL; char* filename = &quot;m:\\2.txt&quot;; if ((fp = fopen(filename,&quot;r&quot;)) == NULL) cout&lt;&lt;&quot;Unable to open...


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

Или воспользуйтесь поиском по форуму:
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
08.02.2013, 13:15  [ТС]     Объясните пожалуйста, как работает код. Указатели #7
abit, Спасибо, разобрался
Yandex
Объявления
08.02.2013, 13:15     Объясните пожалуйста, как работает код. Указатели
Ответ Создать тему
Опции темы

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