После 1-го символа каждого слова вставить последовательность символов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задание:

Раздвинуть заданный текст, вставив введенную с клавиатуры последовательность символов после 1-го символа каждого слова.

Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <locale.h>
  4. #include <string.h>
  5. #include <limits.h>
  6. void main()
  7. {
  8. setlocale ( LC_CTYPE, "RUSSIAN");
  9. char *d, str[SHRT_MAX], str1[SHRT_MAX];
  10. printf_s("Введите первую строку: ");
  11. gets(str); //ввод текста
  12. printf_s("Введите вторую строку: ");
  13. gets(str1); // ввод строки, которую нужно вставить
  14. int n = strlen(str1); //n - это длинна строки
  15. d = strtok(str, " "); //d - указатель на первую букву второго слова
  16. while(d)
  17. {
  18. // вот тут нужно сделать саму вставку
  19. d = strtok(NULL, " "); // d - указатель на первую букву второго, третьего и т.д. слова
  20. }
  21. puts(str); // вывод измененного текста
  22. _getch();
  23. }
Не могу закончить программу, так что бы она работала по заданию, проблема в вставке. Прошу помочь мне ее дописать.

Решение задачи: «После 1-го символа каждого слова вставить последовательность символов»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <limits.h>
  5.  
  6. int main()
  7. {
  8.    char str[SHRT_MAX], subStr[SHRT_MAX];
  9.  
  10.    printf("input first string: ");
  11.    gets(str);
  12.    printf("input second string: ");
  13.    gets(subStr);
  14.  
  15.    size_t nStr = strlen(str);
  16.    size_t nSubStr = strlen(subStr);
  17.  
  18.    char* pstr = str + nStr;
  19.  
  20.    while (str < pstr)
  21.    {
  22.       for (; (str < pstr) && (*pstr == ' '); --pstr) { ; }
  23.  
  24.       if (str == pstr)
  25.       {
  26.          continue;
  27.       }
  28.  
  29.       for (; (str <= pstr) && (*pstr != ' '); --pstr) { ; }
  30.  
  31.       char* tmp1 = str + nStr;
  32.  
  33.       for (; (tmp1 - pstr) > 1; --tmp1)
  34.       {
  35.          *(tmp1 + nSubStr) = *tmp1;
  36.       }
  37.  
  38.       char* tmp2 = subStr;
  39.       for (tmp1++; *tmp2; ++tmp2, ++tmp1)
  40.       {
  41.          *tmp1 = *tmp2;
  42.       }
  43.  
  44.       nStr += nSubStr;
  45.    }
  46.  
  47.    printf("%s\n", str);
  48.  
  49.    system("pause");
  50.  
  51.    return 0;
  52. }

Объяснение кода листинга программы

В этом коде выполняется вставка последовательности символов после первого символа каждого слова в строке. Список действий:

  1. Ввод первой строки с помощью функции gets().
  2. Ввод второй строки с помощью функции gets().
  3. Определение длины первой и второй строк с помощью функции strlen().
  4. Вычисление указателя на последний символ первой строки с помощью str + nStr.
  5. В цикле происходит обход всех слов в первой строке: a. Если текущий символ является пробелом, то его пропуск с помощью *pstr == ' '. b. Если текущее слово пустое, то его пропуск с помощью continue. c. Если текущий символ не является пробелом, то его пропуск с помощью *pstr != ' '.
  6. Копирование последнего символа слова в конец строки с помощью *(tmp1 + nSubStr) = *tmp1.
  7. Копирование символов из второй строки в конец первой строки с помощью *tmp1 = *tmp2.
  8. Увеличение длины первой строки на длину второй строки с помощью nStr += nSubStr.
  9. Вывод первой строки с помощью printf(%s\n, str).
  10. Завершение работы программы с помощью system(pause).
  11. Возврат значения 0, указывающего на успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы