собрать 3 строки вместе, используя как минимум один раз strcpy, strcat, sprintf - PullRequest
0 голосов
/ 27 мая 2019

Моя домашняя задача состоит в том, чтобы создать программу, объединяющую 3 строки, используя strcpy, strcat, sprintf хотя бы один раз.

Мне интересно, смогу ли я использовать все эти три без какого-либо мусорного кода. Я пытался использовать strchr, чтобы использовать sprintf для объединения строк, но расположение указателя изменилось, поэтому не удалось распечатать все.

char str1[MAX];
char str2[MAX];
char str3[MAX];
char str4[MAX];

gets(str1);
gets(str2);
gets(str3);

strcat(str1, str2);
strchr(str1, '\0');
sprintf(str1, "%s", str3);
strcpy(str4, str1);

puts(str4);

Я также хочу узнать, есть ли разница в их использовании между strcpy и sprintf в этом случае.

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Это ничего не делает: strchr(str1,'\0').Внимательно прочитайте документацию strchar.Но вам все равно не нужно strchr здесь, вы, вероятно, просто хотите это:

...
gets(str1);
gets(str2);
gets(str3);

strcpy(str4, str1);   // copy str1 into str4
strcat(str4, str2);   // append str2 to str4
strcat(str4, str3);   // append str3 to str4

puts(str4);           // print str4

Как видите, вам тоже не нужно sprintf.

Но выможно сделать то же самое, используя только sprintf

...
gets(str1);
gets(str2);
gets(str3);
sprintf(str4, "%s%s%s", str1, str2, str3);
puts(str4);

, но тогда вам не нужно strcpy или strcat.

Использование всех strcpy, strcat и sprintf - это несколько бессмысленное требование, но теперь вы сможете это сделать.

0 голосов
/ 27 мая 2019

Допустим, str1 = "ab", str2 = "cd", str3 = "ef"

strcat(str1, str2);

Это объединит str2 в str1, теперь str1 = "abcd"

strchr(str1, '\0'); // это ничего не сделает, просто вернет указатель '\ 0' в str1, который является последним chatracter.

sprintf(str1, "%s", str3);

это выведет "ef" в str1, старое содержимоебудет потеряно, я думаю, что вы хотели сделать

sprintf(<pointer returned from strchr>, "%s", str3);

strcpy(str4, str1);

Это просто скопирует str1 в str4.

puts(str4);

Это напечатает строку str4

Проблемас вашим кодом вы выполняете strchr, а не собираете возвращаемое значение, так что вы можете объединить его там.В этом случае strcpy и sprintf похожи, но sprintf предоставляет вам много вариантов форматирования, см. Документацию.http://www.cplusplus.com/reference/cstdio/sprintf/ Кроме того, ваш макрос MAX должен быть достаточно большим, чтобы содержать строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...