Реализовать функцию - Insert(s, s1, n). Вставка в строку s подстроки s1, начиная с позиции n - C (СИ)

  1. Функция - Insert(s,s1,n). Вставка в строку s подстроки s1, начиная с позиции n (аналогичная библиотечная функция есть в Pascal).


textual

Код к задаче: «Реализовать функцию - Insert(s, s1, n). Вставка в строку s подстроки s1, начиная с позиции n - C (СИ)»

#include <stdio.h>
#include <string.h>
#include <assert.h>
 
char* Insert(char* s, const char* s1, unsigned n) {
    unsigned lenS = strlen(s);
    unsigned lenS1 = strlen(s1);
    assert(n <= lenS);
 
    memmove(s + n + lenS1, s + n, lenS - n + 1);
    memcpy(s + n, s1, lenS1);
 
    return s;
}
 
int main() {
    char text[64] = "Hello !";
    printf("%s\n", Insert(text, "World", 6));
 
    return 0;
}

СДЕЛАЙТЕ РЕПОСТ

7   голосов, оценка 4.000 из 5



Похожие ответы
  1. Всем привет. Недавно начал изучать язык программирования Си и появились трудности с написанием данных программ по задачам: 1.Напишите функцию, которая принимает два входных аргумента и передает вызывающему окружению два результата, первый из которых является произведением аргументов, а второй — их суммой. Поскольку из функции можно непосредственно вернуть только одно значение, придется вернуть второе значение при помощи дополнительного параметра, являющегося указателем или ссылкой.

  1. Доброе время суток! Хочу считать слово из файла "Data.txt" в массив строк arr. В файле только слово "test". Пытаюсь реализовать это с помощью функции (использую CodeBlocks). Программа компилируется и вылетает с сообщением "прекращена работа программы". Думаю, что неправильно передаю массив в функцию или неправильно его в функции вызываю. Подскажите, пожалуйста, что не так? Заранее спасибо.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include   void func(char (*arr)[5]) {     FILE *in = fopen("Data.txt","r");       fscanf(in, "%s", arr[0]);     printf(arr[0]);       fclose(in); }   int main() {     char (*arr)[5];       func(arr);       return 0; }

  1. Написать функцию md(x, y) для получения остатка от деления целочисленных операндов.

  1. Составить функцию нахождения объема параллелепипеда по значениям длин трех ребер, выходящих из одной вершины. С помощью данной функции вычислить объем для N параллелепипедов.

  1. Необходимо модифицировать данную функции, чтобы она указывала на индекс последнего вхождения слова в строке. То есть, если строка - Cyber Forum is Cyber Forum, а искомое слова Cyber, то она не должна выдавать 0.C1 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 27 28 29 30 31 int searchWord(const char str[81], const char word[21]) /* Входные данные: str – исходная строка word – искомое  слово   Выходные данные: возвращаемое значение - индекс первого вхождения искомого слова в строку; возвращает -1, если слово не найдено */ {     int i = 0;     while (str)     {           const char* s1 = str;         const char* p1 = word;           while (*s1 == *p1)         {               s1++; p1++;             if (*p1 == '\0' || *s1 == '\0')break;           }         if (*p1 == '\0') return i;         if (*s1 == '\0') return -1;         str++;         i++;     }     return -1; }

  1. Правильно ли я передаю arg в функцию listInsert? Нет возможности проверить. Ниже структура и фунция встаки аргумента.C1 2 3 4 5 double complex arg; scanf("%d", &re); scanf("%d", &im); arg=re+im*I; listInsert(&list, pos - 1, arg);ФункцииC1 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 void listInsert(List *list, const int index, const LIST_TYPE value) {     int prev, nextHole;       if (list->_size == list->_capacity)     {         printf("Ошибка. Список полон\n");           return;     }       if (list->_size)     {         if (index < 0 || index > list->_size)         {             printf("Ошибка. Позиция не найдена\n");               return;         }     }     else if (index != 0)     {         printf("Ошибка. Позиция не найдена\n");           return;     }       nextHole = list->_arr[list->_hole]._next;       if (index == 0)     {         list->_arr[list->_hole]._next = list->_first;         list->_first = list->_hole;     }     else     {         prev = findPrev(list, index);         list->_arr[list->_hole]._next = list->_arr[prev]._next;         list->_arr[prev]._next = list->_hole;     }       list->_arr[list->_hole]._data = value;     list->_hole = nextHole;     list->_size++;       printf("Элемент %g%+gi вставлен в список\n", creal(arg), cimag(arg));            int findPrev(List *list, const int index) {     int i, prev = list->_first;       if (index == 0)         return END;       for (i = 0; i < index - 1; i++)         prev = list->_arr[prev]._next;       return prev; } } СтруктураC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 typedef double complex LIST_TYPE; typedef struct _Item {     LIST_TYPE _data;     int _next;     int _prev; } Item;   typedef struct _List {     Item *_arr;     int _first;     int _hole;     int _capacity;     int _size; } List;

  1. как вызвать функцию?C1 2 3 4 5 6 7 8 9 10 11 int sum_last(list_ptr a) {     list_ptr ptr;       assert(NULL != a);     assert(NULL != a->next);       for (ptr = a; ptr->next->next; ptr = ptr->next)     {     }     return ptr->data + ptr->next->data; } Это полный кодC1 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 #include #include #include #include #include   typedef int bool; #define true 1 #define false 0   typedef struct list {     int data;     struct list *next; } *list_ptr; char ch1, str[100]; int  i, count = 0; list_ptr x = NULL;   int sum_last(list_ptr a) {     list_ptr ptr;       assert(NULL != a);     assert(NULL != a->next);       for (ptr = a; ptr->next->next; ptr = ptr->next)     {     }     return ptr->data + ptr->next->data; }   void show(struct list *a) {     while (a != NULL) {         printf(" %d\t", a->data);         a = a->next;     } }   bool isnumber(const char*s) {     char* e = NULL;     (void)strtol(s, &e, 0);     return e != NULL && *e == (char)0; }   void add(list_ptr *a, int newdata) {     if (*a == NULL) {         *a = (list_ptr)malloc(sizeof(list_ptr));         (*a)->data = newdata;         (*a)->next = NULL;         return;     }         list_ptr ptr;         for (ptr = *a; ptr->next; ptr = ptr->next)     {             }     ptr->next = (struct list *)malloc(sizeof(struct list));     ptr = ptr->next;     ptr->data = newdata;     ptr->next = NULL; }   int main() {     char c = 0, c1;     int i, j, min, number;       while (c != 27)     {         system("cls");         printf(" Enter - run the program.\n");         printf(" Esc - exit.\n");         printf(" Any other key - information about program.\n");         c = getch();         system("cls");         switch (c)         {         case 27:             break;         case 13:         {             system("cls");             printf("It\'s time to fill the list (to end the filling eneter ***)\n\n");             for (;;) {                 printf("Enter the element:\n>>");                 do                 {                     gets(str);                     if (!isnumber(str) && strcmp(str, "***") != 0) {                         printf("Please, enter an integer number:\n>> ");                         continue;                     }                     break;                 } while (true);                 if (strcmp(str, "***") == 0) break;                 number = atoi(str);                 add(&x, number);                 count++;             }             if (count == 0) printf("\nThe first list is empty.\n");             else printf("Elements in your first list are:\n");             show(x);             x = NULL;             printf("\n\n\nPress \'Enter\' to continue");             getch();             printf("The sum of the last and the penultimate number: ");             printf("\n\tEsc - exit.\n");             printf("\tAny other - go to the main page.\n");             c = getch();             break;         }           default:         {             printf("\n Finds the sum of the last and penultimate elements of the list L containing at least two elements.\n\n");             printf(" Esc - exit.\n");             printf(" Any other - go to the main page.\n");             c = getch();             break;         }         }     }     return 0; }

  1. создать функцию, которая считает сумму элементов стека

  1. Здравствуйте! Подскажите, пожалуйста, как переделать эту функцию в рекурсивную?C1 2 3 4 5 6 7 8 9 int obr(int x) {int ob=0;     do{     ob*=10;     ob+=x%10;     x/=10;     }while(x>0); return ob; }

  1. Сравнить 2 слова и вывести не повторяющиеся буквы.Например: бог огРезультат: бПроверить по символьно 1 слово с 2, а потом 2 с 1. Описать это в одной функции.