После 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;
}
Объяснение кода листинга программы
В этом коде выполняется вставка последовательности символов после первого символа каждого слова в строке. Список действий:
- Ввод первой строки с помощью функции
gets(). - Ввод второй строки с помощью функции
gets(). - Определение длины первой и второй строк с помощью функции
strlen(). - Вычисление указателя на последний символ первой строки с помощью
str + nStr. - В цикле происходит обход всех слов в первой строке:
a. Если текущий символ является пробелом, то его пропуск с помощью
*pstr == ' '. b. Если текущее слово пустое, то его пропуск с помощьюcontinue. c. Если текущий символ не является пробелом, то его пропуск с помощью*pstr != ' '. - Копирование последнего символа слова в конец строки с помощью
*(tmp1 + nSubStr) = *tmp1. - Копирование символов из второй строки в конец первой строки с помощью
*tmp1 = *tmp2. - Увеличение длины первой строки на длину второй строки с помощью
nStr += nSubStr. - Вывод первой строки с помощью
printf(%s\n, str). - Завершение работы программы с помощью
system(pause). - Возврат значения 0, указывающего на успешное выполнение программы.