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

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

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

Подскажите в чем ошибка в моей программе (рекурсия) - C++

22.08.2013, 18:24. Просмотров 625. Ответов 19
Метки нет (Все метки)

Программа копирует строку t в конец строки s: вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
int i=0;
string fn_strcat(string s,string t)
{
    char *p=&t[i];//создаем указатель "р", изначально на нулевой элемент строки t
    while(*p!='\0')// пока не дойдем до конца строки
    {
        s=s+*p++;//сначало к строке s прибавляем p и потом увеличиваем р
        ++i;
        fn_strcat(s,t);//рекурсия
    }
    return (s);
}
int main()
{
    string s,t;
    cin>>s>>t;
    cout<<fn_strcat(s,t);
}
P.S. Заранее спасибо за ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2013, 18:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите в чем ошибка в моей программе (рекурсия) (C++):

в чем ошибка в программе? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void main() { int sum = 0, temp = 0, n; ...

В чем ошибка использования rand() в программе - C++
Не могу понять, почему рандомит масив из 75 нулей, а не из диапазона чисел от 16 до 53 #define _CRT_SECURE_NO_WARNINGS ...

Подскажите, где ошибка в программе - C++
#include&lt;iostream.h&gt; #include&lt;math.h&gt; void main() {int b,k,t; b=0;k=0;t=0; {if ...

Подскажите в чем ошибка - C++
Не могу понять вроде все правильно а не запускается #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; ...

Подскажите, в чем ошибка? - C++
Задача:Напишите программу преобразования последовательности 12 символов-цифр, вводимых из стандартного потока, в числовое значение типа...

Подскажите в чем ошибка - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; void main() { int i; float a,b; double c; FILE *fout; ...

19
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
22.08.2013, 18:29 #2
Цитата Сообщение от Nikko12 Посмотреть сообщение
Подскажите в чем ошибка
В понимании того что такое объекты в первую очередь.
Цитата Сообщение от Nikko12 Посмотреть сообщение
Программа копирует строку t в конец строки s: вот код:
C++
1
cout<<(s+=t);
0
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
22.08.2013, 18:33  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Сообщение от Nikko12
Подскажите в чем ошибка
В понимании того что такое объекты в первую очередь.
Не совсем понял, можно конкретнее??

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
Код C++
C++
1
cout<<(s+=t);
Не совсем понял, куда это вставить.
0
Kuzia domovenok
1947 / 1800 / 137
Регистрация: 25.03.2012
Сообщений: 6,234
Записей в блоге: 1
22.08.2013, 18:36 #4
Цитата Сообщение от Nikko12 Посмотреть сообщение
Не совсем понял, можно конкретнее??
ты ерунду какую-то написал. String в твоём примере стандартный? Если да, зачем вообще какие-то функции для него писать?
Ну и как следствие, в теле функции лютый бред
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
22.08.2013, 18:36 #5
Цитата Сообщение от Nikko12 Посмотреть сообщение
Не совсем понял, куда это вставить.
C++
1
2
3
4
5
6
7
8
9
10
#include<iostream>
#include <string>
 
using namespace std ;
 
int main ( ) {
    string s,t;
    cin>>s>>t;  
    cout<<(s+=t);
}
0
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
22.08.2013, 18:54  [ТС] #6
Croessmah, Я хотел реализовать присоединение строк с помощью указателей и рекурсивно.

Добавлено через 42 секунды
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ты ерунду какую-то написал. String в твоём примере стандартный?
Что значит "стандартный"??

Добавлено через 56 секунд
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ну и как следствие, в теле функции лютый бред
Можно Ваш вариант, не бредовый?
0
no_wearines
53 / 49 / 2
Регистрация: 01.01.2012
Сообщений: 332
22.08.2013, 19:01 #7
Вот вам вариант не бредовый:
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
#include <iostream>
#include <cstring>
#include <conio.h>
using namespace std;
 
void f1(char *array1, char *ptr1) {
 
if(!*ptr1) { *array1 = '\0'; return; }
 
*array1++ = *ptr1++;
 
f1(array1, ptr1);
}
 
 
int main() {
char array1[20] = "Hello ", *ptr1 = "world";
 
 
f1(array1 + strlen(array1), ptr1);
 
cout<<array1;
 
getch();
return 0;
}
0
Kuzia domovenok
1947 / 1800 / 137
Регистрация: 25.03.2012
Сообщений: 6,234
Записей в блоге: 1
22.08.2013, 19:03 #8
Цитата Сообщение от Nikko12 Посмотреть сообщение
Можно Ваш вариант, не бредовый?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
char* fn_strcat(char* dst, const char* src){
    while(*dst++);
    while(*dst++=*src++);
    return dst;
}
int main(){
    char s1[20]="Hello ";
    fn_strcat(s1, "world");
    cout<<s1;
    return 0;
}
0
no_wearines
53 / 49 / 2
Регистрация: 01.01.2012
Сообщений: 332
22.08.2013, 19:05 #9
Kuzia domovenok. Человечек же рекурсию просил.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.08.2013, 19:16 #10
еловечек же рекурсию просил
а на кой тут рекурсия? вот тут проще рукурсией, а тут(в этой теме) проще циклом, как и написал Кузя
0
no_wearines
53 / 49 / 2
Регистрация: 01.01.2012
Сообщений: 332
22.08.2013, 19:24 #11
причем тут проще или не проще. Человек изучает тему рекурсии.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.08.2013, 20:18 #12
Цитата Сообщение от no_wearines Посмотреть сообщение
Человек изучает тему рекурсии.
можно изучать тему структур данных сортируя стеки, вот это тоже самое
2
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
22.08.2013, 23:47  [ТС] #13
no_wearines, Спасибо
Jupiter, Если уж помогаете, так помогайте по теме, или вообще лучше не помогайте.

Добавлено через 1 минуту
P.S. Что нужно исправить в моей программе, что бы она не завершалась с ошибкой?

Добавлено через 56 секунд
P.S.S. Мне не нужен другой код с использование указателей и рекурсией, меня интересует ошибка в моей программе.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.08.2013, 03:07 #14
Цитата Сообщение от Nikko12 Посмотреть сообщение
меня интересует ошибка в моей программе.
Их много.
При последнем заходе в функцию, здесь будет выход за границу строки:
C++
1
char *p=&t[i];//создаем указатель "р", изначально на нулевой элемент строки t
При чтении в string, cin >> не добавляет '\0', поэтому такая проверка не сработает:
C++
1
while(*p!='\0')// пока не дойдем до конца строки
Цикл while() здесь не нужен, рекурсия сама по себе цикл.
Не нужно передавать в функцию копии строк, и не нужно возвращать из функции копию строки, иначе, при выходе из рекурсии, строка начнёт уменьшаться.
Если так переписать, то будет работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int i = 0;
void fn_strcat(string &s, string &t)
{
    if (i == t.size()) return; // пока не дойдем до конца строки
    char *p = &t[i]; //создаем указатель "р", изначально на нулевой элемент строки t
    s = s + *p++; //сначало к строке s прибавляем p и потом увеличиваем р
    ++i;
    fn_strcat(s, t); //рекурсия
 }
 
int main()
{
    string s, t;
    cin >> s >> t;
    fn_strcat(s, t);
    cout << s << endl;
 
    return 0;
}
1
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
23.08.2013, 07:29  [ТС] #15
Цитата Сообщение от alsav22 Посмотреть сообщение
При чтении в string, cin >> не добавляет '\0', поэтому такая проверка не сработает:
Код C++
1
while(*p!='\0')// пока не дойдем до конца строки
Если cin >> не добавляет '\0', в конец строку, то как тогда он узнает, где она заканчитвается??
P.S. Код вполне отлино работал если его переделать без функций т.е. рекурсию заменить на goto и все перенести в main(). Почему он сейчас не хочет работать? Ведь нечего не менялось кардинально?
P.S.S. За ответ большое спасибо.
0
23.08.2013, 07:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2013, 07:29
Привет! Вот еще темы с ответами:

Подскажите в чем ошибка - C++
Есть код: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { vector&lt;int&gt;vec; vector&lt;int&gt;::iterator...

подскажите в чем ошибка - C++
поставлена задача: Задан одномерный массив В, состоящем из n вещественных элементов. Определить позиции массива, в которых расположены...

Подскажите в чем ошибка?! - C++
#include&lt;windows.h&gt; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE my_hinstance, HINSTANCE...

Подскажите в чем ошибка - C++
Вывести матрицу из 20 элементов целого типа. Определить каких элементов больше четных или нечетных { int A, i, m=0, n=0; for(i=0;...


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

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

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