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

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

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

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

31.10.2012, 15:31. Просмотров 368. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2012, 15:31     Аналог рекурсивной функции, отображающей строку в обратном порядке, выводит "мусор"
Посмотрите здесь:

Как из масива "а" записать данные в масив "б" но в обратном порядке - 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++
Срочно нужна помощь! Помогите написать код, очень прощу. Ввести с клавиатуры одномерный массив строк. Расположить элементы массива,...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
31.10.2012, 16:00     Аналог рекурсивной функции, отображающей строку в обратном порядке, выводит "мусор" #2
xtorne21st, а как Вы думаете, что здесь происходит, когда указатель доходит до первого символа?
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
2
3
while (*ch) {
   cout << *ch--;
   }
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
31.10.2012, 16:14  [ТС]     Аналог рекурсивной функции, отображающей строку в обратном порядке, выводит "мусор" #3
Судя по результату оно продолжает идти дальше, вот не понятно почему тогда первый символ не отображается?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
31.10.2012, 16:38     Аналог рекурсивной функции, отображающей строку в обратном порядке, выводит "мусор" #4
При выходе за пределы поведение программы не предсказуемо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2012, 18:09     Аналог рекурсивной функции, отображающей строку в обратном порядке, выводит "мусор"
Еще ссылки по теме:

Аналог функции system("pause"); - C++
Использую функцию system(&quot;pause&quot;); для отображения консоли в конце программы, подскажите пожалуйста что нибудь кроссплатформенно и по...

Слова на букву "А" в тексте переписать в обратном порядке, определить количество предложений в тексте - C++
Как решить задачу на с++? В тексте все слова, начинающиеся на букву 'A', переписать в обратном порядке. Определить количество...

Выводится мусор при выводе массива в обратном порядке - C++
Дайте пожалуйста объяснение багу, высочившемуся у меня во время выполнения следующего задания: вывести массив из n элементов в обратном...

Почему вместо обратного слеша "\" выводит "¥" - C++
Компилятор напрочь отказывается ставить обратный слеша В других программах все работает нормально. VS community 2015 Загружайте...

Почему переменной присваивается произвольное значение("мусор")? - C++
Мой черновой вариант кода. Он очень черновой так что многое не суть важно, но переменной х я присваиваю значение 0. Если после приглашения...

Написать рекурсивную версию функции, "перевертывающей" строку S - C++
Написать рекурсивную версию функции, &quot;перевертывающей&quot; строку S.


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

Или воспользуйтесь поиском по форуму:
xtorne21st
интересующийся
303 / 274 / 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;
}
Yandex
Объявления
31.10.2012, 18:09     Аналог рекурсивной функции, отображающей строку в обратном порядке, выводит "мусор"
Ответ Создать тему
Опции темы

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