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

По. разобрать программу с указателями и массивами ( авторы Либерти, Дмитрий ) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа, которая считает сколько тебе лет http://www.cyberforum.ru/cpp-beginners/thread962046.html
Добрый день, товарищи! В данный момент занимаюсь самостоятельным изучением языка С++. После написания программы-калькулятор, пришла в голову мысль написать программу, которая высчитывает сколько тебе лет. Однако написать получилось только самый простенький код, который считает года без месяцев, вот он: #include <iostream> using namespace std; int main () { setlocale (LC_ALL,...
C++ Создать стек, определить сколько елементов находится до минимального значения Создать стек с числами в диапазоне от –50 до +50. После создания стека выполнить индивидуальное задание. В конце работы все стеки должны быть удалены. Индивидуальное задание:Определить, сколько элементов стека, начиная от вершины, находится до элемента с минимальным значением. http://www.cyberforum.ru/cpp-beginners/thread962019.html
факториал сократить C++
Добрый день. Хотел спросить как сократить факториал? Формула приведена ниже, красным обведено. Вот сама формула записана в С++, и вместо верхней формулы я использовал х. Теперь вместо этого хнужно подставить формулу в сокращенном виде, а как это сделать я не знаю. Помогите пожалуйста, буду очень благодарен. p*=x/(k*(2*k+1)); #include "stdafx.h" #include <iostream>
Передача аргументов командной строки функции main() C++
Добрый день Дана задача: Напишите программу, которая запрашивает пароль, задаваемый в команд- ной строке. Ваша программа не должна реально выполнять какие-либо действия, за исключением выдачи сообщения о том, корректно ли был вве- ден пароль или нет. Мои потуги: #include <windows.h> #include <iostream>
C++ Вывести в цикле те цифры числа, которые не делятся на 3 без остатка. http://www.cyberforum.ru/cpp-beginners/thread961971.html
Вывести только те цифры числа, которые не делятся на 3 без остатка.
C++ Нахождение минимального элемента в стеке Вроде стек получилось реализовать, а вот как найти минимальный элемент без понятия. #include <iostream.h> #include <stdlib.h> #include <stdio.h> /*НАША СТРУКТУРА*/ struct List { подробнее

Показать сообщение отдельно
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
25.09.2013, 14:22     По. разобрать программу с указателями и массивами ( авторы Либерти, Дмитрий )
Программа

В строках 26, 28 мы создаем массивы?

С помощю getline мы вводим строку. И о чудо! я вижу, что теперь в массиве не 225 символов, а столько, сколько
я вводил.

bool GetWord(char* string, char* word, int& wordOffset) указатели на массив? int& нну забыл, и не сображу, это что?

cout << "string[wordOffset]: " << string[wordOffset] << endl; ( стр.63 ) выводит 284 символа, причем сначала 4 строки бог знает каких символов и тут же без перехода введённую строку.

char *p1, *p2; (стр.71) самая непонятка!!!!! Это же указатель. Вот мы ег обьявили

p1 = p2 = string+wordOffset; Что же в нем хранится? Указатель? почему при прямом выводе выводится не адрес, а строка? Я ожидал, что так буде вывиден cout << "p1: " << p1 << endl;адрес, а так cout << "*p1: " <<*p1 << endl;
строка, однако строка выводится прямо!!

Мало того, при операции p1++; из строки сначала вычитается по символу на каждый шаг!! Как это???? Офигеть!!

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//Листинг 8.11. Выделение слов из массива символов
#include <string> 
#include <iostream> // для объекта cout
using namespace std;
 
#include<iomanip>
//Этот файл содержит большую часть манипуляторов C++. Если вы не знаете, что такое манипулятор, не беспокойтесь. Просто подключите это файл вместе с iostream, хуже не станет.
#include<fstream> 
//Подключается при работе с файлами.
 
 
 #include <ctype.h>
 
 #include <string.h>
 
 bool GetWord(char* string, char* word, int& wordOffset);
 
 // основная программа
 
 int main()
 
 {   char*  sprobuem;
 
     const int bufferSize = 255;
 
     char buffer[bufferSize+1]; // переменная для хранения всей строки
 
     char word[bufferSize+1]; // переменная для хранения слова
 
     int wordOffset = 0; // начинаем с первого символа
 
     cout << "Enter а string: ";  
 
     cin.getline(buffer,bufferSize);
 
     sprobuem=buffer; cout << "sprobuem: " << sprobuem << endl;
 
     
 
  while (GetWord(buffer,word,wordOffset))
 
   {
    cout << "Got this word: " << word << endl;
   }
 
 
 
  system("pause  ");return(0);
 
 }
 
 
 
 // Функция для выделения слова из строки символов.
 
 bool GetWord(char* string, char* word, int& wordOffset)
 
 {
 
     cout << "string: " << string << endl;
     cout << "word: " << word << endl;
     cout << "wordOffset: " << wordOffset << endl;
     cout << "string[wordOffset]: " << string[wordOffset] << endl;
 
    if (!string[wordOffset]) // определяет конец строки?
 
      return false;
 
 
 
    char *p1, *p2;
 
    p1 = p2 = string+wordOffset; // указатель на следующее слово
     cout << "p1: " << p1 << endl;
       cout << "p2: " << p2 << endl;
 
 
 
    // удаляем ведущие пробелы
       cout << "strlen(p1): " << strlen(p1) << endl;  cout << "isalnum(p1[0]): " << isalnum(p1[0]) << endl;
 
    for (int i = 0; i<(int)strlen(p1) && !isalnum(p1[0]); i++){// strlen Возвращает длину строки с завершающим нулевым символом
 
      p1++; //Функция isalnum() возвращает ненулевое значение, если ее аргумент ch является либо буквой, либо цифрой. 
      cout << "p1: " << p1 << endl; cout << "i: " << i << endl;}
 
 
    // проверка наличия слова
 
   // if (!iKalruj[n(pl[0]))
 
   //   return false;
 
 
 
    // указатель р1 показание начало сдолующего слова
 
    // iа к жо как и p2
 
    p2 = p1;  
 
 
 
    // перпмещавм p2 и конец олова
 
    while (isalnum(p2[0]))
 
    {   p2++;    cout << "p2++: " << p2 << endl; }
 
 
 
    // p2 указывает на конец слова
 
    // а p1 - в начало
 
    // разность указатолой показываот длину слова
 
    int len = int (p2 - p1);     cout << "len: " << len << endl;   cout << "p2 - p1: " << p2 - p1 << endl; 
 
 
 
    // копируем слово в буфер
 
    strncpy (word,p1,len);  // Функция strncpy() копирует до count символов из строки, адресуемой параметром str2, в массив, адресуемый параметром str1. Параметр str2 должен указывать на строку с завершающим нулевым символом.
 
    cout << "word: " << word << endl;   cout << "strlen(word): " << strlen(word) << endl;
 
 
 
    // и добавляем символ разрыва сроки
 
    word[len]='\0';   for (int i = 0; i<=len; i++) cout << "word[i]: " << word[i] << "    [i]: " << i  <<  endl;
    cout << "word: " << word << endl;
 
 
    // ищем начало следующего слова
 
    for (int i = int(p2-string); i<(int)strlen(string) && !isalnum(p2[0]); i++) // strlen Возвращает длину строки с завершающим нулевым символом
 
      p2++;   //Функция isalnum() возвращает ненулевое значение, если ее аргумент ch является либо буквой, либо цифрой. 
 
 
 
    wordOffset = int(p2-string);
 
 
 
    return true;
 
 }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru