Эта программа должна принимать две строки и объединять каждый элемент один за другим во время цикла. Например, если у меня есть
первой строка, как: hlowrd
и второй строки, как: Эль-ол
окончательная строка должна быть привет мир
Однако, когда вторая строка длиннее, чем первый будет отрезать остальные символы. Я считаю, что это связано с тем, что я структурировал цикл for в функции comb, но я не уверен, как подойти к его исправлению.C Программа - объединить 2 строки во время цикла
#include <stdio.h>
#include <string.h>
#define N 50
int read_text(char *str, int n);
void combine(char *s3, const char *s1, const char *s2);
int main(void)
{
char string1[N+1];
char string2[N+1];
char string3[N+1];
printf("Enter: \n");
read_text(string1, N);
printf("Enter: \n");
read_text(string2, N);
combine(string3, string1, string2);
printf("New string is: %s\n", string3);
return 0;
}
int read_text(char *str, int n)
{
int ch, i = 0;
while ((ch = getchar()) != '\n') {
if (i < n) {
*str++ = ch;
i++;
}
}
*str = '\0';
return i;
}
void combine(char *s3, const char *s1, const char *s2)
{
const char *s;
s = s1;
for(s = s3; *s1 != '\0'; s++) {
strcpy(s3++, s1++);
strcpy(s3++, s2++);
}
*s3 = '\0';
}
'strcpy' действительно работает, хотя и немного (хорошо, много) неэффективно внутри цикла. Я тестировал код с ним, и он отлично работает. – owacoder
@owacoder Это ответ [который я знал до публикации]. Не используя strcpy, он чище, проще (!) И является _practical_ ответом, к которому вы должны стремиться. Для меня [C в течение 30 + лет], strcpy - ошибка (потому что это путь далеко не оптимальный), и я бы написал отчет об ошибке. Просмотрите свой код и мой. Ваш код показал, что вы действительно не понимаете проблему/решение - это реальная проблема. wrench_can_ быть молотком - иногда. Но, mag на 1000x в реальной базе кода, и это нетривиально. Всегда сохраняйте код настолько простым, насколько это необходимо [и не проще]. Кроме того, проверьте эго на дверь ... –
Я знаю полностью, откуда вы. Однако я не пытался использовать «ключ в качестве молотка». Мне жаль, если бы это получилось. Лично я бы не использовал код моего ответа на производстве. Тем не менее, она * решила проблему OP (на данный момент без особых изменений). Я ничего не имею против вашего метода и фактически буду защищать его. Мой ответ (и комментарий) был строго быстрым решением. В течение длительного времени исправить и улучшить, я определенно выберет ваш ответ. Я просто указывал в своем комментарии, что 'strcpy' в этом случае будет * работать *, но не обязательно * хорошо *. – owacoder