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

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

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

Задание:

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

#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
#include <limits.h>
 
void main()
{
    setlocale ( LC_CTYPE, "RUSSIAN");
           char *d, str[SHRT_MAX], str1[SHRT_MAX];
         printf_s("Введите первую строку: ");
                gets(str);              //ввод текста
         printf_s("Введите вторую строку: ");
                gets(str1);             // ввод строки, которую нужно вставить
           int n = strlen(str1);        //n - это длинна строки 
                d = strtok(str, " ");           //d - указатель на первую букву второго слова
      while(d)
    {
        // вот тут нужно сделать саму вставку
        d = strtok(NULL, " ");          // d - указатель на первую букву второго, третьего и т.д. слова
    }
    puts(str);          // вывод измененного текста
    _getch();
}
Не могу закончить программу, так что бы она работала по заданию, проблема в вставке. Прошу помочь мне ее дописать.

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
 
int main()
{
   char str[SHRT_MAX], subStr[SHRT_MAX];
 
   printf("input first string: ");
   gets(str);
   printf("input second string: ");
   gets(subStr);
 
   size_t nStr = strlen(str);
   size_t nSubStr = strlen(subStr);
 
   char* pstr = str + nStr;
 
   while (str < pstr)
   {
      for (; (str < pstr) && (*pstr == ' '); --pstr) { ; }
 
      if (str == pstr)
      {
         continue;
      }
 
      for (; (str <= pstr) && (*pstr != ' '); --pstr) { ; }
 
      char* tmp1 = str + nStr;
 
      for (; (tmp1 - pstr) > 1; --tmp1)
      {
         *(tmp1 + nSubStr) = *tmp1;
      }
 
      char* tmp2 = subStr;
      for (tmp1++; *tmp2; ++tmp2, ++tmp1)
      {
         *tmp1 = *tmp2;
      }
 
      nStr += nSubStr;
   }
 
   printf("%s\n", str);
 
   system("pause");
 
   return 0;
}

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

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

  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
Похожие ответы