Отредактировать текст по заданным правилам - C (СИ)
Формулировка задачи:
№ 4. Задать с клавиатуры текст. Отредактировать текст по следующим правилам: перед запятой не может быть пробела; после запятой должен стоять один пробел; не могут стоять подряд две запятые.
Решение задачи: «Отредактировать текст по заданным правилам»
textual
Листинг программы
/* № 4. Задать с клавиатуры текст. Отредактировать текст по следующим правилам:
перед запятой не может быть пробела;
после запятой должен стоять один пробел;
не могут стоять подряд две запятые. */
#include <stdio.h>
#include <locale.h>
int editstr(char* text)
{
size_t textLength = strlen(text);
int i = 0;
char buff[256];
for(i = 1;i < textLength - 1; i++)
{
if ((text[i] == ' ')&&(text[i+1] == ','))
{
strncpy(buff, text+i+1,textLength);
strncpy(&text[i], buff,textLength);
}
if ((text[i] == ',')&&(text[i+1] == ','))
{
strncpy(buff, text+i+1,textLength);
strncpy(&text[i], buff,textLength);
}
if ((text[i] == ',')&&(text[i+1] != ' '))
{
strncpy(buff, text+i+1,textLength);
strncpy(&text[i+2], buff,textLength);
text[i+1] = ' ';
}
}
}
int main(int argc, char *argv[])
{
setlocale( LC_ALL,"Russian" );
printf("Введите текст:");
char text[256];
gets(text);
editstr(text);
printf("%s",text);
}
Объяснение кода листинга программы
- Задание текста в память компьютера с помощью клавиатуры.
- Ввод текста в программу с помощью функции gets().
- Выделение памяти под буфер для хранения отредактированного текста.
- Инициализация переменной textLength значением, равным длине введенного текста.
- Создание цикла for для обработки каждого символа исходного текста, начиная со второго символа и заканчивая предпоследним.
- Проверка условия: если текущий символ является пробелом и следующий символ является запятой, то выполняется блок кода.
- Копирование символов из буфера buff в переменную text, начиная с позиции i+1 и до конца текста.
- Проверка условия: если текущий символ является запятой и следующий символ также является запятой, то выполняется блок кода.
- Копирование символов из буфера buff в переменную text, начиная с позиции i+1 и до конца текста.
- Проверка условия: если текущий символ является запятой и следующий символ не является пробелом, то выполняется блок кода.
- Копирование символов из буфера buff в переменную text, начиная с позиции i+2 и до конца текста.
- Замена первого символа пробела на запятую.
- Вывод отформатированного текста на экран с помощью функции printf().
- Функция main() возвращает 0, что означает успешное выполнение программы.
- Ввод текста с клавиатуры не проверяется на ошибки.
- Программа не обрабатывает ситуацию, когда ввод текста превышает размер буфера.
- Программа не обрабатывает ситуацию, когда ввод текста содержит символы, не входящие в диапазон ASCII.
- Программа не обрабатывает ситуацию, когда ввод текста содержит символы, не соответствующие требованиям правил форматирования.
- Программа не обрабатывает ситуацию, когда ввод текста содержит только пробелы.
- Программа не обрабатывает ситуацию, когда ввод текста пустой.