Консультация № 189029
29.03.2016, 17:49
0.00 руб.
0 2 1
Здравствуйте! Помогите исправить код:
Условие задачи: Нужно написать функцию, которая после первого вхождения C в строку STR вставляет строку STR0, возвращает указатель на расширенную строку STR.
Я тут пытался самостоятельно решить эту задачу, но не вышло. Помогите, пожалуйста, понять, что я делаю не так.
Вот моя очередная попытка:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
char *extens(char *str,char c, char *str0);
int main()

{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Введите str: \n");
char str[100];
gets(str);
printf("Введите str0: \n");
char str0[100];
gets(str0);
printf("Введите символ c: \n");
char c;
scanf("%s", &c);
puts(extens(str, c, str0));

return 0;
}
char *extens(char *str,char c, char *str0)
{
char *ptr, *ptr0, *temp;
ptr+=strlen(str);
ptr0+=strlen(str);
temp=str;

while (*str!=c)
str++;



while (ptr!=str)
{
ptr0+=strlen(str0);
*ptr0=*ptr;
ptr--;
ptr0--;
}
while (*str0!='\0')
{
ptr0=str0;
ptr++;
*ptr=*ptr0;
ptr0++;
}

str=temp;


return str;

}


Обсуждение

давно
Посетитель
7438
7205
29.03.2016, 18:43
общий
это ответ
Здравствуйте, YarLam125!
Что-то подправил, что-то записал компактнее...
[code h=200]
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>

char *extens(char *str,char c, char *str0);

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Введите str: \n");
char str[100];
gets(str);
printf("Введите str0: \n");
char str0[100];
gets(str0);
printf("Введите символ c: \n");
char c;
scanf("%c", &c); //мы вводим символ, а не строку
puts(extens(str, c, str0));
return 0;
}
char *extens(char *str,char c, char *str0)
{
char *ptr, *ptr0, *temp;
ptr=str+strlen(str); //на конец строки str
ptr0=ptr+strlen(str0); //на конец str+str0
temp=str; //для возврата адреса строки

while ((*str!=0) && (*str)!=c)
str++; //ищем символ и только в пределах строки

if (*str) //найден? Если не найден, строка не меняется
{
while (ptr!=str)
*(ptr0--)=*(ptr--); //копируем хвост старой строки в хвост новой

while (*str0!='\0')
*(++ptr)=*(str0++); //копируем вставку
}
return temp;
}[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399292
22
29.03.2016, 19:23
общий
Адресаты:
Спасибо огромное! Вы очень помогли!
Форма ответа