Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056

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

31.10.2012, 15:31. Показов 975. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.10.2012, 15:31
Ответы с готовыми решениями:

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

Делит строку на слова и выводит их в обратном порядке
Нужно разделить строку !!!ОБЯЗАТЕЛЬНО С ПОМОЩЬЮ ФУНКЦИИ strtok!!! и вывести слова в обратном порядке. Научился только выводить слова...

Написать программу, которая выводит строку в обратном порядке
Обращаюсь К Знатокам Среды ТурбоПаскаль. Заранее Благодарен. Вводится Строка. Каждый Символ Заносится В Узел Стека. Написать...

4
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
31.10.2012, 16:00
xtorne21st, а как Вы думаете, что здесь происходит, когда указатель доходит до первого символа?
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
2
3
while (*ch) {
   cout << *ch--;
   }
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
31.10.2012, 16:14  [ТС]
Судя по результату оно продолжает идти дальше, вот не понятно почему тогда первый символ не отображается?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
31.10.2012, 16:38
При выходе за пределы поведение программы не предсказуемо.
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
31.10.2012, 18:09  [ТС]
Спасибо что напомнили, иногда элементарные вещи выскакивают из головы.
Правильное решение:
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.10.2012, 18:09
Помогаю со студенческими работами здесь

Напишите функцию шаблонизации format(), которая выводит строку в обратном порядке
Напишите функцию шаблонизации format(), которая выводит строку в обратном порядке. Примеры использования функции format(): function...

Напишите функцию шаблонизации format(), которая выводит строку в обратном порядке
Напишите функцию шаблонизации format(), которая выводит строку в обратном порядке. Примеры использования функции format(): function...

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

Шаблон функции, которая выводит переданный ей массив в обратном порядке
Написать программу, которая инициализирует 3 массива длиной 15 типов int, float, char. Написать шаблон функции, которая выводит ...

Вам доступен текстовый файл text.txt. Напишите программу, которая выводит на экран эту строку в обратном порядке
Вам доступен текстовый файл text.txt с одной строкой текста. Напишите программу, которая выводит на экран эту строку в обратном порядке. ...


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

Или воспользуйтесь поиском по форуму:
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