Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2013, 01:12   #1
san4er
Новичок
Джуниор
 
Регистрация: 07.12.2013
Сообщений: 5
Сообщение Соединение 2 масива через for c+

у меня проблема хочу соединить 2 масива пример

char* spoj_retezce(const char* retezec1, const char* retezec2){

int delka1 = strlen(retezec1);
int delka2 = strlen(retezec2);
char* retezec = (char*) malloc(sizeof(char) * delka1 + delka2);

int i ;
for (i = 0; i < delka1; i++) {
retezec[i] = retezec1[i];
}
for (i = 0; i < delka2; i++) {
retezec[i] = retezec2[i];
}

return retezec;
}

int main() {

printf("%s\n", spoj_retezce("abc", "def")); // abcdef
printf("%s\n", spoj_retezce("Anorexia ", "Nervosa")); // Anorexia Nervosa
printf("%s\n", spoj_retezce("13", "49")); // 1349
printf("%s\n", spoj_retezce("", "Cradle of Filth")); // Cradle of Filth
printf("%s\n", spoj_retezce("Star", " Trek")); // Star Trek
printf("%s\n", spoj_retezce("Almost ", "Human")); // Almost Human
printf("%s\n", spoj_retezce("", "")); //

return 0;
}

на даный момент мне показывает вот это


def
Nervosaa GW;C:\PX├Ţ║B░
49n
Cradle of Filthh]├Ţ┐B░
Trek
Humant
ś8n

в чём проблема кто знает ??
san4er вне форума Ответить с цитированием
Старый 07.12.2013, 01:28   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

У вас и в первом цикле retezec[и] = ..., и во втором retezec[и] = , и оба раза и начинается от нуля. То есть повторно заполняете символами те же элементы выходного массива.

И вот тут (sizeof(char) * delka1 + delka2); скобку не пропустили? Хотя для char это наверное не имеет значения.
type_Oleg вне форума Ответить с цитированием
Старый 07.12.2013, 02:19   #3
san4er
Новичок
Джуниор
 
Регистрация: 07.12.2013
Сообщений: 5
По умолчанию

int i, k;
for (i = 0; i < delka1 ; i++) {
retezec[i] = retezec1[i];
}
for (k = i; k < delka2; k++) {
retezec[k] = retezec2[k];
}


return retezec;
}

так тоже не чего неполучается

пишет

abc
Anorexia GW;C:\Program F-Î↕*╣*
13g
Cradle of Filthm*Î↕¸ż*
Stark
Almost
ś8g

Последний раз редактировалось san4er; 07.12.2013 в 02:28.
san4er вне форума Ответить с цитированием
Старый 07.12.2013, 02:21   #4
san4er
Новичок
Джуниор
 
Регистрация: 07.12.2013
Сообщений: 5
По умолчанию

пишет первый масив

Последний раз редактировалось san4er; 07.12.2013 в 02:28.
san4er вне форума Ответить с цитированием
Старый 07.12.2013, 02:31   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Что, в самом деле так у вас
Код:
for (i = 0; retezec[i] ; i++)
В качестве условия retezec[и] - ?

Или просто не то вставили

И во втором цикле - надо не до длины второго массива, а до суммарной длины.

Последний раз редактировалось type_Oleg; 07.12.2013 в 02:33.
type_Oleg вне форума Ответить с цитированием
Старый 07.12.2013, 03:03   #6
san4er
Новичок
Джуниор
 
Регистрация: 07.12.2013
Сообщений: 5
По умолчанию

можешь посоветать сумарную длину как сделать
san4er вне форума Ответить с цитированием
Старый 07.12.2013, 03:06   #7
san4er
Новичок
Джуниор
 
Регистрация: 07.12.2013
Сообщений: 5
По умолчанию

я сделал так
int delka1 = strlen(retezec1);
int delka2 = strlen(retezec2);
int delka3 = strlen(retezec1) + strlen(retezec2);
char* retezec;
retezec = (char*)malloc(strlen(retezec1) + strlen(retezec2) + 1);

int i, k;
for (i = 0; i < delka1 ; i++) {
retezec[i] = retezec1[i];
}
for (k = i; k < delka3; k++) {
retezec[k] = retezec2[k];
}


return retezec;
}

пишет

abc
Anorexia norexiarogram F&°↕Łî´
13
Cradle of Filthm!°↕Üő´
Stark
Almost lmosthare+°↕Éő´
ś8d
san4er вне форума Ответить с цитированием
Старый 07.12.2013, 04:16   #8
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Я сам запутался на ночь глядя
Вот так работает:
Код:
#include <stdio.h>
char* spoj_retezce(const char* retezec1, const char* retezec2)
{   
  strcat(retezec1, retezec2) ;
  return retezec1;
	}
int main()
{  
  char s1[]="abc",s2[]="def";
  printf(spoj_retezce(s1,s2));
  return 0;
}
type_Oleg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оброботка масива.найти елемент масива с указанием его адреса в строке и в столбце Rokko195 Паскаль, Turbo Pascal, PascalABC.NET 3 20.12.2012 07:22
Соединение через интернет (C++ Builder) badfilin C++ Builder 1 21.03.2010 21:32
Соединение через два NAT Acharia C/C++ Сетевое программирование 8 11.09.2009 15:36
Dial Up соединение через модем sato_2005 Работа с сетью в Delphi 3 16.07.2008 22:00
Соединение с БД через Интернет Kate Работа с сетью в Delphi 1 08.06.2007 08:49