С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

Аналог рекурсивной функции, отображающей строку в обратном порядке, выводит "мусор" - C++

31.10.2012, 15:31. Просмотров 389. Ответов 4
Метки нет (Все метки)

Добрый день, при попытке написать аналог рекурсивной функции отображающей строку в обратном порядке напоролся на грабли:
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
#include <iostream>
#include <cstdio>
using namespace std;
 
void reverse_r(char* ch);
void reverse_i(char* ch);
// int factorial (int i);
// int max_value (int a, int b);
 
int main()
{
 
    cout << "Enter some string: ";
    char arr_c[80];
    gets(arr_c);
 
    reverse_r(arr_c);
    cout << '\n';
    reverse_i(arr_c);
    cout << '\n';
 
    return 0;
}
 
void reverse_r (char *ch)
{
    if (*ch)
    reverse_r(ch + 1);
    else return;
    cout << *ch;
}
 
void reverse_i (char* ch)
{
    while (*++ch); // установим указатель в конец массива
    --ch; // перейдём с символа завершающего строку
    while (*ch) {
    cout << *ch--;
    }
    return;
}
Bash
1
2
3
4
5
6
7
(gdb) run                                                                                                                              
Starting program: /media/win_d/Helloworld/currents/test-cpp                                                                            
Enter some string: Hello world!                                                                                                        
!dlrow olleH                                                                                                                           
!dlrow olle^D\240^D\240^D\205^D\207^D\237\364                                                                                          
[Inferior 1 (process 3872) exited normally]                                                                                            
(gdb)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2012, 15:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Аналог рекурсивной функции, отображающей строку в обратном порядке, выводит "мусор" (C++):

Как из масива "а" записать данные в масив "б" но в обратном порядке - C++
#include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;numeric&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int...

Выводит "мусор" при считывании файла - C++
Вывод // (c) vladyxa13 #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;locale&gt; #include &lt;fstream&gt; using namespace std; ...

Индекс элемента массива, для которого значение функции - минимально. "Мусор в выводе" - C++
Собственно поставлена следующая задача: Разработать функцию P, находящую индекс элемента массива Х, для которого зачение функции f...

Определить длину данной строки и количество букв "а" в ней. Вывести имя в обратном порядке - C++
Ввести фамилию, имя и отчество как одно текстовое дано. Определить длину данной строки и количество букв &quot;а&quot; в нем. Решить задачу двумя...

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

Написать программу которaя запрашиваeт у пользователя номер дня недели, затем выводит одно из сообщений "рабочий день", "суббота", "воскресенье" - C++
Добрый день необходимо написать несколько программ, кто может помогите. одна тема - одна задача!

4
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
31.10.2012, 16:00 #2
xtorne21st, а как Вы думаете, что здесь происходит, когда указатель доходит до первого символа?
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
2
3
while (*ch) {
   cout << *ch--;
   }
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
31.10.2012, 16:14  [ТС] #3
Судя по результату оно продолжает идти дальше, вот не понятно почему тогда первый символ не отображается?
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
31.10.2012, 16:38 #4
При выходе за пределы поведение программы не предсказуемо.
1
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
31.10.2012, 18:09  [ТС] #5
Спасибо что напомнили, иногда элементарные вещи выскакивают из головы.
Правильное решение:
C++
1
2
3
4
5
6
7
8
9
10
void reverse_i (char* ch)
{
    char* tmp = ch;
    while (*++ch); // установим указатель в конец массива
    --ch; // перейдём с символа завершающего строку
    while (ch >= tmp) {
    cout << *ch--;
    }
    return;
}
0
31.10.2012, 18:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2012, 18:09
Привет! Вот еще темы с ответами:

Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" - C++
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: &quot;Рабочий день&quot;,&quot;Суббота&quot; или...

Расположить элементы массива, лежащие до первого символа "к", в порядке, обратном алфавитному, и вывести на печать отсортирванный массив данных - C++
Срочно нужна помощь! Помогите написать код, очень прощу. Ввести с клавиатуры одномерный массив строк. Расположить элементы массива,...

Нужно написать код для программы, которая выводит на экран звездочки ("*") в таком порядке: - C++
Нужна помощь в решении проблемы. Правда язык обучения у меня английский, поэтому некоторые задания на английском. Задание #3: Нужно...

После каждого знака препинания (".", ",", ";") вставить в строку пробел, если там его нет - C++
Выполните задания с использованием библиотечного класса string. Даны строка S. Необходимо после каждого знака препинания (&quot;.&quot;, &quot;,&quot;,...


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

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

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