Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185

Программа с лексемами через указатели

29.09.2012, 21:02. Показов 761. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопросы в комментариях к коду. Не понятка в 2-х местах кода
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
#include <iostream>
#include <cstring>
using namespace std;
 
int main()
{
    char str[80];
    char token[80];
    char *p, *q;
 
    cout << "Enter any sentance: \n";
    gets(str); // ввожу к примеру "купить машину"
 
    p = str;
 
    while(*p) {
        q = token;
 
        while(*p!=' ' && *p) {
            *q = *p;
            q++; p++;
        }
        if(*p) p++;// зачем нам p++ когда это уже и так конец строки?
        *q = '\0'; // не понятно зачем это присваивание, когда у нас *q уже будет содержать слово "купить"?
        cout << token << '\n';
    }
 
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2012, 21:02
Ответы с готовыми решениями:

программа сделана через указатели, переделать через ссылки.
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cmath&gt; using namespace std; void calculation(double...

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Написать программу сортировки через указатели на указатели
Вот моя программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; //Сортировка...

4
59 / 59 / 8
Регистрация: 29.06.2012
Сообщений: 188
29.09.2012, 21:15
веселая программка, никогда бы не подумала, что это будет работать)
1. Когда происходит выход из цикла , например когда закончилось слово,
C++
1
while(*p!=' ' && *p)
в p будет содержатся пробел, чтобы перейти на следующий символ пишется
C++
1
if(*p) p++;
2. *q = '\0'; любая строка должна в конце содержать '\0' для обозначения ее конца
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.09.2012, 21:43
Выход из внутреннего цикла будет или по пробелу, или по концу строки. Если по пробелу (не конец строки), то p++ (переход к следующему слову). Для того чтобы нормально сработало: cout << token << '\n'; в конце слова в token должен стоять '\0', иначе cout << будет выводить содержимое памяти, пока не встретит 0. В результате, после вывода слова, будет выведен и всякий мусор. Закоментируйте строку: *q = '\0'; и посмотрите на результат.
1
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
29.09.2012, 22:33  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Выход из внутреннего цикла будет или по пробелу, или по концу строки. Если по пробелу (не конец строки), то p++ (переход к следующему слову). Для того чтобы нормально сработало: cout << token << '\n'; в конце слова в token должен стоять '\0', иначе cout << будет выводить содержимое памяти, пока не встретит 0. В результате, после вывода слова, будет выведен и всякий мусор. Закоментируйте строку: *q = '\0'; и посмотрите на результат.
Немного не понятно на счёт того, что в конце слова в token должен стоять '\0'. Если идти по коду, то когда мы присваиваем *q=*p у нас потом посимвольно записываются все символы в token. Вот мы записали (к примеру у нас было "купить машину", у нас в *q записалось "купить" и соответственно в token записалось "купить". Ниже же когда мы делаем так *q = '\0'; мне становится не понятно как вообще этот знак помещается в конце слова в token, это ведь массив, он что ли помещаетс в последний индекс массива?)
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.09.2012, 23:17
Цитата Сообщение от aleksand Посмотреть сообщение
token, это ведь массив, он что ли помещаетс в последний индекс массива?)
Да. Только не в последний индекс, а после последнего помещённого туда символа, т.е. после 'ь'. В token будет: купить'\0'. Помещается он туда так же, как и символы слова во внутреннем цикле while(). Вначале, указателю p присваивается адресс начала массива str: p = str;, а указателю q присваивается адресс начала массива token: q = token; После этого p указывает на начало str (на str[0]), а q указывает на начало token (на token[0]). Потом в цикле делается: *q = *p;, т.е. token[0] присваивается значение str[0]. После этого значения указателей увеличиваются: q++; p++; Теперь q указывает на token[1], а p указывает на str[1], и т.д. После помещения в token 'ь' (в token[5]) и q++; p++, q будет указывать на token[6], а p - на пробел, поэтому произойдёт выход из внутреннего цикла и в token[6] запишется '\0'(*q = '\0').
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.09.2012, 23:17
Помогаю со студенческими работами здесь

Неверное отображение результата с цифрами(задачи с лексемами)
Здравствуйте, требования к данной задаче звучат так Написать программу для распознавания лексем. Задача - преобразовать...

Заполнение массива через rand и вывод на экран через указатели
Учитель задал заполнить массивы и случайными числами и вывезти на экран через указатели, через функцию rand выводит как вы понимаете одни...

Реализовать стек и очередь через массивы и через указатели (в виде списка) – т. е. 4 структу
Для массивов выделить изначально 5 ячеек (при нехватке памяти - выделять дополнительно в 2 раза больше). Пустой ячейкой считать ячейку с...

Работа с массивом через пользовательские функции через указатели
Не хочет работать ( Выводит только последний элемент массива ) Help! #include &lt;iostream&gt; using namespace std; void vvod(int x,...

Перегруженные функции. Через указатели и через ссылки. С++
1. Даны действительные числа a, b и c . Проверить выполняется ли неравенство: a&lt;b&lt;c.если да, то заменить квадратами, иначе заменить модулем...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru