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

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

Войти
Регистрация
Восстановить пароль
 
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
#1

Не вижу сообщения из цикла фор - C++

24.09.2013, 00:04. Просмотров 361. Ответов 3
Метки нет (Все метки)

Не представляю что это может быть. (строка 83) cout << "p1: " << p1 << endl; cout << "i: " << i << endl;

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
//Листинг 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++;
 
 
 
    // p2 указывает на конец слова
 
    // а p1 - в начало
 
    // разность указатолой показываот длину слова
 
    int len = int (p2 - p1);
 
 
 
    // копируем слово в буфер
 
    strncpy (word,p1,len);  // Функция strncpy() копирует до count символов из строки, адресуемой параметром str2, в массив, адресуемый параметром str1. Параметр str2 должен указывать на строку с завершающим нулевым символом.
 
 
 
 
 
    // и добавляем символ разрыва сроки
 
    word[len]='\0';
 
 
 
    // ищем начало следующего слова
 
    for (int i = int(p2-string); i<(int)strlen(string) && !isalnum(p2[0]); i++) // strlen Возвращает длину строки с завершающим нулевым символом
 
      p2++;   //Функция isalnum() возвращает ненулевое значение, если ее аргумент ch является либо буквой, либо цифрой. 
 
 
 
    wordOffset = int(p2-string);
 
 
 
    return true;
 
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2013, 00:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не вижу сообщения из цикла фор (C++):

Цикл фор - C++
Помогите написать программу, уже довольно долго сижу с ней, завтра надо уже отчет сдавать помогите пожалуйста. Найти значение...

Выражение в скобках и без скобок. Какая разница? В цикле фор - C++
Почему (c=getchar()) в скобках работает корректно, а без них нет. Вот вариант без скобок for(nl;c=getchar()!=eof;) #pragma hdstop ...

почему все что после цикла фор не работает? - JavaScript
function load(){ if (document.choiceForm.zerkalo.checked){ alert('мы тут'); var textarr = new...

Установил компонент, вижу интерфейс, не вижу самого компонента - C++ Builder
Rad Studio XE5. Зарегистрировал dll Собрал tlb Импортировал компонент из длл Размещаю импортированный компонент на форму Вижу...

на windows 7 не вижу интернета но вижу сеть - Сети
Здраствуйте начну пожалуй по порядку. На протяжении долгох лет пользовался ХР, захотелось чего то нового и решил себе поставить win 7. ...

Вывод сообщения за 10 последних итераций цикла - Delphi
Добрый день всем! Имеется код, который в таймере выключает/ребутит компьютер (все работает): procedure TForm1.Timer1Timer(Sender:...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 293
24.09.2013, 00:07 #2
Возможно так? Хотя не уверен..
C++
1
cout << "p1: " << *p1 << endl;
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
24.09.2013, 00:07 #3
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
strlen Возвращает длину строки с завершающим нулевым символом
Нет, strlen возвращает длину строки без учета завершающего нулевого символа.
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
24.09.2013, 17:08  [ТС] #4
Спасибо. Не знаю, что strlen Возвращает я скопировал себе из справки, не понял все же что касается завершающего нулевого символа. А по результатам я точно вижу, что число сответствует длине строки.

cout << "p1: " << p1 << endl; Я использую так, так-как, эти пе, обьявленные с указателем, дальше у автора используются просто так, просто как пе первое и второе, и я их так поэтому и вывожу.

Цикл работает, пока в начале строки пробелы.Вроде понял. p1 и 2 выводит в цикле введенную строку, между прочим.

Также cout << "string: " << string << endl; выводит строку, а cout << "wordOffset: " << wordOffset << endl;выводит три строки хаотичных символов, заканчивающиеся веденой строкой.

Добавлено через 5 минут
Таки да, этот цикл каким-то образом удаляет пробел, если он в начале строки!! Вот это да!!!!

Добавлено через 55 минут
Поразительно!!!!!! Эти пе один и два все показывали из себя введенную мной строку или ее часть, но при их взаимном вычитании выходит число!!!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2013, 17:08
Привет! Вот еще темы с ответами:

Запуск второго цикла сообщения в единичном потоке является недопустимой операцией - C#
Ошибка: &quot;Запуск второго цикла сообщения в единичном потоке является недопустимой операцией. Вместо этого используйте Form.ShowDialog.&quot; ...

Написать программу, которая с помощью цикла FOR /D ищет в log-файлах Windows сообщения... - CMD/BAT
Написать программу, которая с помощью цикла FOR /D ищет в log-файлах Windows сообщения, задаваемые пользователем. Текст сообщения вводится...

задача на фор - Pascal ABC
среди трех значных чисел выбрать те которые кратны трем и не кратны 5 надо через фор

Доступ к фор - C#
Есть класс, основанный на System.Diagnostics.Process. В нем есть таймер типа System.Timers.Timer, который вызывает некоторый эвент...


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

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

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