Вставить в текст заданные слова и словосочетания - C (СИ)
Формулировка задачи:
Обнаружено, что в тексте пропущены некоторые слова и словосочетания. Эти слова и словосочетания заданы отдельным списком в том порядке, в котором они должны быть вставлены в текст. Места вставки отмечены в тексте символом "$". Скорректировать текст.Помогите пожалуйста,буду крайне благодарен.За ранее спасибо
Ну пожалуйста,я вообще не особо имею представления как выглядеть должен код,у меня только предположения есть.
Спасите!
Решение задачи: «Вставить в текст заданные слова и словосочетания»
textual
Листинг программы
//gcc 5.4.0
#include <stdio.h>
#include <string.h>
#define MAXBUF 100
int main(void)
{
char *strings[] = {"Hello","world","!"};
char text[MAXBUF] = "$ bbb$ aaa mde$";
char buf[MAXBUF];
size_t i=0,j=0,k=0;
for (;text[i];) {
if (text[i] == '$') {
size_t len = strlen(strings[k]);
++i;
memmove(&text[i+len], &text[i], &text[strlen(text)]-&text[i]);
j+=snprintf(&text[j], MAXBUF-i, "%s", strings[k++]);
i += len;
} else {
text[j++] = text[i++];
}
}
puts(text);
return 0;
}
Объяснение кода листинга программы
- В данном коде на языке C осуществляется вставка заданных слов и словосочетаний в текст.
- Для работы кода необходимо наличие в системе GNU C компилятора версии 5.4.0 и выше.
- Код содержит объявление массива строк
strings[]с тремя элементами:Hello,world,!. - Текст, в который необходимо вставить слова и словосочетания, представлен в виде строки
text[]. - Для хранения промежуточных результатов используется буфер
buf[]. - В цикле происходит сопоставление символов текста с элементами массива
strings[]. - Если символ текста равен
$, то в буферbuf[]копируется следующее за ним слово или словосочетание из массиваstrings[]. - Для выравнивания символов текста, следующих за вставленным словом или словосочетанием, используется функция
memmove(). - Вставленное слово или словосочетание добавляется в итоговый текст с помощью функции
snprintf(). - Если символ текста не равен
$, то он просто копируется в итоговый текст. - В конце программы выводится итоговый текст с помощью функции
puts(). - Для определения размера буфера
buf[]используется константаMAXBUF, равная 100. - В итоговом тексте слова и словосочетания, вставленные в код, будут выделены символами
$. - В данном коде не предусмотрена обработка ошибок.
- Код будет работать корректно только в том случае, если в массиве
strings[]будет находиться не менее одного слова или словосочетания. - Код будет работать корректно только в том случае, если в тексте будет находиться не более одного вставляемого слова или словосочетания.
- Если в тексте будет находиться несколько вставляемых слов или словосочетаний, то они будут добавлены в текст последовательно, разделяя друг друга пробелами.
- Вставка слов и словосочетаний будет производиться в указанные в коде места текста.
- Вставка слов и словосочетаний будет производиться без учета регистра символов.
- Для вставки слов и словосочетаний в текст необходимо использовать функцию
snprintf()с указанием индекса буфераbuf[]и длины итогового текста.