Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 30.03.2015
Сообщений: 53
1

Вывод строки в обратной последовательности

12.09.2015, 00:22. Показов 1020. Ответов 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
#include <iostream>
using namespace std;
#include <Windows.h>
 
 
 
void Q(void)
{
    char c;
 
    cin.get(c);
    if (c != '\n')
        Q();
    cout << c;
}
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите текстовую строку :"<<endl;
    Q();
    
cout << endl;
 
}
Помогите разобраться с просходящим.
cin.get(c); -записывает символ в буфер обмена
а что здесь:
if (c != '\n')
Q();
Если "с"не равно следующей строке чтоли?
то Q() подскажите кто знает.
Я не пойму за счет чего происходит считывание в обратном направлении.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2015, 00:22
Ответы с готовыми решениями:

Использование стека для печати строки в обратной последовательности
нужно написать программу, которая вводит строку текста и использует объект стека для печати строки...

Вывести на экран слова заданной строки в обратной последовательности
Строка, введенная пользователем, состоит из слов, разделенных запятой. Вывести на экран слова в...

Вывести на экран слова заданной строки в обратной последовательности
Суть задания Вывести на экран слова заданной строки в обратной последовательности Вот код...

Вывод определенного количества символов заданной строки текста в обратной последовательнгости
Есть примерный код: int main() { setlocale(LC_ALL, &quot;Russian&quot;); cout &lt;&lt; &quot;Введите строку&quot; &lt;&lt;...

6
1360 / 997 / 316
Регистрация: 28.07.2012
Сообщений: 2,759
12.09.2015, 00:39 2
Цитата Сообщение от GDERTT Посмотреть сообщение
записывает символ в буфер обмена
Читает символ из буфера обмена.
Цитата Сообщение от GDERTT Посмотреть сообщение
if (c != '\n')
Если c не является символом перевода строки. Он устанавливается в конце текущей строки, когда нужно начать новую. Также он вставляется, когда при вводе текста давишь Enter.
Цитата Сообщение от GDERTT Посмотреть сообщение
Я не пойму за счет чего происходит считывание в обратном направлении.
За счет рекурсии: Ты ввел, например строку "ab\n". Считывается символ 'a', 'a' != '\n', вызывается снова функция Q(). Считывается следующий символ 'b', 'b' != '\n', вызывается функция Q(). Считывается символ '\n', '\n' = '\n',
выводим символ '\n' и выходим из функции Q(). Куда выходим? Туда, откуда она была вызвана, т.е. в функцию Q(), где было прочитано 'b'. Выводится 'b', функция завершается, а затем выводится 'a'.
1
Модератор
Эксперт .NET
5805 / 4682 / 2940
Регистрация: 20.04.2015
Сообщений: 8,350
12.09.2015, 00:39 3
Цитата Сообщение от GDERTT Посмотреть сообщение
Я не пойму за счет чего происходит считывание в обратном направлении.
за счет рекурсии. Функция вызывает саму себя до тех пор, пока не будет нажат "Enter", после чего производится вывод начиная с последней вызванной функции.
1
0 / 0 / 1
Регистрация: 30.03.2015
Сообщений: 53
12.09.2015, 00:56  [ТС] 4
Вот я и не пойму за счет чего начинается вывод с последней вызванной функции. у нас пишется a=>b=>
а - является 1ым элементом а "b"-2ым. Рекурсия здесь в чем - она же определяется за счет предыдущей начальной операции n*n-1 ..

Добавлено через 23 секунды
Вот я и не пойму за счет чего начинается вывод с последней вызванной функции. у нас пишется a=>b=>
а - является 1ым элементом а "b"-2ым. Рекурсия здесь в чем - она же определяется за счет предыдущей начальной операции n*n-1 ..
0
Модератор
Эксперт .NET
5805 / 4682 / 2940
Регистрация: 20.04.2015
Сообщений: 8,350
12.09.2015, 01:08 5
GDERTT,
смысл проще понять, если вместо вызова Q() подставить код функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Q(void)
{
    char c;
    cin.get(c); //сначала вводим с
    if (c != '\n') //введем с не равеное '\n' 
    {
      char c1;
      cin.get(c1); //затем вводим c1
      if (c1 != '\n') //если с1 таки будет равен '\n' (Нажмем Enter)
      {
        Q();
      }
      cout << c1; // сначала выводим c1
    }
    cout << c; //после выводим с
}
1
528 / 430 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
12.09.2015, 01:09 6
Цитата Сообщение от GDERTT Посмотреть сообщение
а - является 1ым элементом а "b"-2ым
Да. Только вывод начинает работать, когда рекурсия заканчиваются и вызовы завершаются. И вся иерархия вложенных вызовов начинает выводить те символы, которые были прочитаны (только снизу вверх теперь)
Как бы работал код с "ab":
В первом вызове Q() (Q1) прочитал символ a и вызвал Q() (назовем его Q2)
Новый вызов Q() прочитал b и вызвал Q() (назовем Q3)
Новый вызов Q() прочитал \n, вывел его и заврешил Q3
Q3 завершился, и код Q2 вызова выводит то, что он прочитал - b
Q2 завершился и Q1 выводит то, что он причитал - a.
1
0 / 0 / 1
Регистрация: 30.03.2015
Сообщений: 53
12.09.2015, 01:30  [ТС] 7
Спасибо. Конечно чтение без int main(void) вызывает ряд ошибок в моем С++ и делает невозможным выполнение.
Методом перебора я понял что Q() в if (c1 != '\n') //если с1 таки будет равен '\n' (Нажмем Enter)
{
Q();
}
и является таки корнем зла выполняющим все в обратном направлении.
P.S.
Error 2 error LNK1120: 1 unresolved externals
Error 1 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

Добавлено через 4 минуты
Velesthau, спасибо.все лежало немного дальше чем я представлял)

Добавлено через 9 минут
Огромное спасибо вам что не оставили в беде--- nonedark2008,Даценд, Velesthau
Я разобрался.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2015, 01:30

Вывод строки в виде hex-последовательности
Добрый день, собственно есть задача вывести строку в виде hex последовательности. Насколько я...

Вывод строки на экран с использованием esp-последовательности
ДОБРЫЙ ДЕНЬ,в нашем ВУЗе ввели дисциплину по С++,я в ней-полный чайник(((((помогите,пожалуйста,с...

Делители в обратной последовательности
Написать программу, которая выводит все делители числа в обратной последовательности. Написал код...

Вывести на экран слова в обратной последовательности
Строка, введенная пользователем, состоит из слов, разделенных запятой. Вывести на экран слова в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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