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

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

Войти
Регистрация
Восстановить пароль
 
trinkle69
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 16
#1

Рекурсия: скопировать первую строку в конец второй - C++

24.10.2013, 12:52. Просмотров 529. Ответов 10
Метки нет (Все метки)

День добрый. Задачка попалась не из лёгких как по мне. Условие вот:
Функция принимает две строки. С помощью рекурсии нужно скопировать первую, в конец второй.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 12:52     Рекурсия: скопировать первую строку в конец второй
Посмотрите здесь:

В строке скопировать каждый второй символ в конец строки C++
Поменять местами первую строку и строку сумма элементов которой минимальна C++
C++ Вторую строку нужно скопировать в конец первой
C++ Скопировать первую матрицу во вторую
Перенести первую букву в конец слова C++
C++ Скопировать первую половину введенной строки в другую строку
Переместить в слове первую букву в конец слова C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12520 / 7082 / 797
Регистрация: 27.09.2012
Сообщений: 17,489
Записей в блоге: 2
Завершенные тесты: 1
24.10.2013, 13:18     Рекурсия: скопировать первую строку в конец второй #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
void foo ( const char * first , char * second ) {
    for ( ; *second ; ++second ) {
    }
    *(second++) = *first ;
    if ( *first == 0 )
        return ;
    *second = 0 ;   
    foo ( ++first , second ) ;
}
 
int main ( ) {
    char str1 [ 1024 ] = "String 1" ;
    char str2 [ 1024 ] = "String 2 " ;
    std :: cout << str1 << "\n" << str2 << std :: endl ;
    foo ( str1 , str2 ) ;
    std :: cout << str1 << "\n" << str2 << std :: endl ;
}
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
24.10.2013, 15:17     Рекурсия: скопировать первую строку в конец второй #3
Выглядит красиво. Но я так и не понял логику работы функции. А когда пытаюсь её в дебагере расковырять, она вообще работает как-то неадекватно

Не можете написать комментарии к функции, очень интересно. (Я не топик стартер, кстати, просто интересно стало.)
trinkle69
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 16
24.10.2013, 19:51  [ТС]     Рекурсия: скопировать первую строку в конец второй #4
Croessmah, я лично тоже ничего не понял..

Добавлено через 1 час 42 минуты
Вот что получилось у меня исходя из твоего кода.. Но теперь у меня другая проблема. У меня после первого элемента, который я добавляю в конец другой строки, не ставится ноль, и так далее со всеми элементами. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
using namespace std;
void copy(char str1[30],char str2[30],int i) 
{
    int len=strlen(str1);
    str1[len++]=str2[i];
    
    if (str2[i]==0)
        return;
   
    copy (str1,str2,++i) ;
}
 
void main ( ) {
    char str1[30];
    char str2[30];
    cin>>str1>>str2;
    copy(str1,str2,0);
    cout << str1 << endl;
}
gng
621 / 467 / 126
Регистрация: 08.09.2013
Сообщений: 1,217
24.10.2013, 20:08     Рекурсия: скопировать первую строку в конец второй #5
Вариация на ту же тему (main взята у Croessmah)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string.h>
 
void foo ( const char * first , char * second ) {
  if (*first) {
    *(second)= *first;
    foo ( ++first , ++second ) ;
  }
  else *(second)= 0;
}
 
int main ( ) {
    char str1 [ 1024 ] = "String 1" ;
    char str2 [ 1024 ] = "String 2 " ;
    std :: cout << str1 << "\n" << str2 << std :: endl ;
    foo ( str1 , str2 + strlen (str2) ) ;
    std :: cout << str1 << "\n" << str2 << std :: endl ;
}
Добавлено через 4 минуты
PS. Одна строка из его main все же у меня изменена.
Thinker
Эксперт C++
 Аватар для Thinker
4218 / 2192 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.10.2013, 21:10     Рекурсия: скопировать первую строку в конец второй #6
C++
1
2
3
4
void Strcpy(char *s, char *t) 
{
    *s ? Strcpy(s + 1, t) : ((*s = *t) ? Strcpy(s + 1, t + 1) : *s);
}
gng
621 / 467 / 126
Регистрация: 08.09.2013
Сообщений: 1,217
24.10.2013, 21:43     Рекурсия: скопировать первую строку в конец второй #7
Thinker, это на каком диалекте языка в ? могут стоять void и char?

Добавлено через 5 минут
PS.
Цитата Сообщение от Thinker Посмотреть сообщение
(*s = *t) ? Strcpy(s + 1, t + 1) : *s
Слева void, справа char

Добавлено через 3 минуты
PPS. А в остальном оригинально - одна строка.
Thinker
Эксперт C++
 Аватар для Thinker
4218 / 2192 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.10.2013, 22:00     Рекурсия: скопировать первую строку в конец второй #8
gng, вот так правильнее, но по другой причине)
C++
1
2
3
4
char *Strcpy(char *s, char *t, int flag = 1) 
{
    return (*s && flag) ? Strcpy(s + 1, t) : ((*s = *t) ? Strcpy(s + 1, t + 1, 0) : s);
}
gng
621 / 467 / 126
Регистрация: 08.09.2013
Сообщений: 1,217
24.10.2013, 22:28     Рекурсия: скопировать первую строку в конец второй #9
Да, другая причина более коварна, и при статическом буфере под строку даже всегда будет давать верный результат )))
trinkle69
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 16
25.10.2013, 01:44  [ТС]     Рекурсия: скопировать первую строку в конец второй #10
Ребятки, что на счет редактирования моего кода.. Стиль который используете Вы, мне не знаком, я только учусь ))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 10:33     Рекурсия: скопировать первую строку в конец второй
Еще ссылки по теме:

Приписать второе слово второй строки к первой, развернуть первую строку C++
Второе слово второй строки нужно скопировать в первую строку C++
Отсортировать по возрастанию первую строку и второй столбец матрицы C++
C++ В первую строку вывести силы игроков первой команды, во вторую - второй
Скопировать первую половину введенной строки в другую строку C++

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

Или воспользуйтесь поиском по форуму:
gng
621 / 467 / 126
Регистрация: 08.09.2013
Сообщений: 1,217
25.10.2013, 10:33     Рекурсия: скопировать первую строку в конец второй #11
Цитата Сообщение от trinkle69 Посмотреть сообщение
У меня после первого элемента, который я добавляю в конец другой строки, не ставится ноль, и так далее со всеми элементами.
Каким образом ноль должен добавляться?
Если после строки в буфере забиты нули, то ваша программа будет работать.
Yandex
Объявления
25.10.2013, 10:33     Рекурсия: скопировать первую строку в конец второй
Ответ Создать тему
Опции темы

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