Задать вопрос
@Retr0Hacker

Как вставить определенное слово в строку в необходимом мне месте?

Задача: "Разработать функцию, которая вставляет в предложение заданное слово. Новое слово должно стать в предложении n-м (n задается как третий параметр функции). С клавиатуры введите три символьные строки и слово. Используя разработанную функцию вставить дополнительное слово во введенные строки так, чтобы в первой строке оно стало первым, во второй – третьим, а в последней – пятым".

С первым предложением проблем нет. А вот со вторым и третьим, никак не выходит. Пробовал считать кол-во пробелов в предложениях, но не получается.

Где и что не так?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
# define MAX 1000

struct Stroka{
	char First[100];
	char Second[100];
	char Third[100];
	char Word[20];
}list[MAX];

int i = 0;
void Poshuk();
void Poshuk1();
void Poshuk2();

int main(){

	for (i; i < 1; i++) {
		system("chcp 1251");
		printf("Первое предложение: ");
		gets_s(list[i].First);
		printf("Второе предложение: ");
		gets_s(list[i].Second);
		printf("Третье предложение: ");
		gets_s(list[i].Third);
		printf("Слово: ");
		gets_s(list[i].Word);
		getchar();
	}

	Poshuk();
	Poshuk1();
	Poshuk2();

	return 0;
}

void Poshuk() {
	for(int j = 0; j < i; j++) {
		printf_s("Обработанное: %s %s", list[j].Word, list[j].First);
	}
	getchar();
}

void Poshuk1() {
	char* p2 = list[i].Word, * p1 = list[i].Second;
	for (int i = 0; i < 3; i++) {
		if (*p1 == ' ') {
			p1++;
		}
	}
	strcpy(p1, p2);
	printf_s("Обработанное: %s", &p1);
	getchar();
}

void Poshuk2() {
	char* p2 = list[i].Word, * p1 = list[i].Third;
	for (int i = 0; i < 5; i++) {
		if (*p1 == ' ') {
			p1++;
		}
	}
	strcpy(p1, list[i].Word);
	printf_s("Обработанное: %s", &p1);
	getchar();
}
  • Вопрос задан
  • 99 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Не так почти в каждой строчке.

Во-первых, зачем вам структура из четырех строк? Зачем вам массив из нее на 1000 элементов.

Вот это вообще что за хрень?
for (i; i < 1; i++) {

Вас этот цикл из одной итерации нисколько не напрягает?

Далее, в задании четко сказано
Разработать функцию, которая вставляет в предложение заданное слово. Новое слово должно стать в предложении n-м (n задается как третий параметр функции)


Т.е. вам надо взять одну функцию, и вызвать ее 3 раза с передавая туда то 1, то 2, то 5, а не писать 3 Poshuk'а.

Далее, во всех ваших функциях вы обращаетесь к list[] по разным индексам, но у вас только один первый элемент массива вводится (опять, нахрена вам целый массив структур, если в задаче дано ровно 3 строки и одно слово?!)

Ну и последнее, логика искомой функции должна быть такой: Проходимся по переданной строке, считатем, сколько пробелов встретили. Как только встречаем пробел с заданным номером, сдвигаем все символы за этим пробелом вправо на длину вставляемого слова, потом копируем слово в пустое место.

Чтобы сдвигать символы в строке вам надо сначала найти ее длину, потом с длина+k циклом пройтись назад до крайнего сдвигаемого индекса и присваивать текущему символу значение символа по индексу i-k.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы