Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
xtorne21st
интересующийся
305 / 276 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
1

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

31.10.2012, 15:31. Просмотров 464. Ответов 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
Ответы с готовыми решениями:

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

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

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

Определить длину данной строки и количество букв "а" в ней. Вывести имя в обратном порядке
Ввести фамилию, имя и отчество как одно текстовое дано. Определить длину данной строки и...

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

4
Toshkarik
1155 / 871 / 91
Регистрация: 03.08.2011
Сообщений: 2,434
Завершенные тесты: 1
31.10.2012, 16:00 2
xtorne21st, а как Вы думаете, что здесь происходит, когда указатель доходит до первого символа?
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
2
3
while (*ch) {
   cout << *ch--;
   }
0
xtorne21st
интересующийся
305 / 276 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
31.10.2012, 16:14  [ТС] 3
Судя по результату оно продолжает идти дальше, вот не понятно почему тогда первый символ не отображается?
0
Toshkarik
1155 / 871 / 91
Регистрация: 03.08.2011
Сообщений: 2,434
Завершенные тесты: 1
31.10.2012, 16:38 4
При выходе за пределы поведение программы не предсказуемо.
1
xtorne21st
интересующийся
305 / 276 / 93
Регистрация: 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

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

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

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


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

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

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