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

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

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

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

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

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

Второе слово второй строки нужно скопировать в первую строку - C++
дано 2 строки, каждые имеют 5 слов с пробелами, нужно обычным способом составить код чтобы 2-ое слово 2-ой строки нужно скопировать в 1-ую...

В строке скопировать каждый второй символ в конец строки - C++
есть задача: в строке s скопировать каждый 2й символ в конец строки. я не могу понять в чем ошибка, либо просто не понял условие ...

Вторую строку нужно скопировать в конец первой - C++
Нужно написать программу, суть такая: Вводятся с клавиатуры две строки, вторую нужно скопировать в конец первой, причем все согласные у...

Скопировать первую половину введенной строки в другую строку - C++
Написать программу копирования первой половины введенной строки в другую строку

Скопировать первую половину введенной строки в другую строку - C++
Написать программу копирования первой половины введенной строки в другую строку код на C++

Отсортировать по возрастанию первую строку и второй столбец матрицы - C++
Помогите пожалуйста!с++. Отсортировать по возрастанию первую строку и второй столбец матрицы. Заранее огромное спасибо)

10
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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 ;
}
2
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
24.10.2013, 15:17 #3
Выглядит красиво. Но я так и не понял логику работы функции. А когда пытаюсь её в дебагере расковырять, она вообще работает как-то неадекватно

Не можете написать комментарии к функции, очень интересно. (Я не топик стартер, кстати, просто интересно стало.)
0
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;
}
0
gng
645 / 491 / 133
Регистрация: 08.09.2013
Сообщений: 1,326
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 все же у меня изменена.
0
Thinker
Эксперт С++
4228 / 2202 / 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);
}
1
gng
645 / 491 / 133
Регистрация: 08.09.2013
Сообщений: 1,326
24.10.2013, 21:43 #7
Thinker, это на каком диалекте языка в ? могут стоять void и char?

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

Добавлено через 3 минуты
PPS. А в остальном оригинально - одна строка.
0
Thinker
Эксперт С++
4228 / 2202 / 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);
}
0
gng
645 / 491 / 133
Регистрация: 08.09.2013
Сообщений: 1,326
24.10.2013, 22:28 #9
Да, другая причина более коварна, и при статическом буфере под строку даже всегда будет давать верный результат )))
0
trinkle69
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 16
25.10.2013, 01:44  [ТС] #10
Ребятки, что на счет редактирования моего кода.. Стиль который используете Вы, мне не знаком, я только учусь ))
0
gng
645 / 491 / 133
Регистрация: 08.09.2013
Сообщений: 1,326
25.10.2013, 10:33 #11
Цитата Сообщение от trinkle69 Посмотреть сообщение
У меня после первого элемента, который я добавляю в конец другой строки, не ставится ноль, и так далее со всеми элементами.
Каким образом ноль должен добавляться?
Если после строки в буфере забиты нули, то ваша программа будет работать.
0
25.10.2013, 10:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 10:33
Привет! Вот еще темы с ответами:

Приписать второе слово второй строки к первой, развернуть первую строку - C++
Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать второе слово второй строки к первой. Поменять порядок следования...

В первую строку вывести силы игроков первой команды, во вторую - второй - C++
N игроков хотят разбиться на две команды. Причем хотят разделиться так - самый сильный игрок - в первой команде, следующий самый сильный -...

Скопировать первую матрицу во вторую - C++
Здравствуйте,помогите с написанием кода. Задача в том что,создаем первый двумерный массив из введеных значений M и K,заполняем некоторыми...

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


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

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

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