Отредактировать строку удаляя лишние пробелы между словами - C (СИ)
Формулировка задачи:
Отредактировать строку удаляя лишние пробелы между словами.На языке си.
Решение задачи: «Отредактировать строку удаляя лишние пробелы между словами»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("input text: ");
char text[1024];
fgets(text, sizeof(text)-1, stdin);
char* str = text;
size_t offset = 0;
size_t count = 0;
for (; *str; ++str)
{
count = (*str == ' ') ? count+1 : 0;
if (count > 1)
{
offset++;
}
else
{
*(str - offset) = *str;
}
}
*(str - offset) = 0;
printf("result: %s", text);
system("pause");
return 0;
}
Объяснение кода листинга программы
В этом коде на языке C выполняется следующая последовательность действий:
- Сначала пользователю предлагается ввести текст. Для этого используется функция
printfдля вывода сообщения с просьбой ввести текст, и затем используется функцияfgetsдля считывания текста из стандартного ввода, с учетом того, что ввод может содержать символы новой строки (\n). - Затем вводится цикл, который проходит по каждому символу введенного текста. Переменная
strинициализируется значениемtext, а переменнаяoffsetинициализируется нулем. Переменнаяcountиспользуется для отслеживания количества пробелов, которые предшествуют текущему симвору. - Внутри цикла проверяется, является ли текущий символ пробелом. Если это так, то значение
countувеличивается на единицу. - Если
countбольше 1, это означает, что текущий символ не является единственным пробелом между словами, поэтому мы увеличиваемoffsetна единицу, чтобы учесть все пробелы, которые мы собираемся удалить. - Если
countравен или меньше 1, это означает, что текущий символ является единственным пробелом между словами или является первым символом слова. В этом случае мы копируем текущий символ обратно в строку, начиная с позицииstr - offset, чтобы удалить все пробелы перед ним. - После завершения цикла, последняя позиция в строке обнуляется, чтобы убедиться, что в конце строки нет лишних пробелов.
- Наконец, исходная строка выводится обратно пользователю с помощью функции
printf, и затем вызывается функцияsystem, чтобы приостановить выполнение программы до тех пор, пока пользователь не нажмет любую клавишу. - В конце программы возвращается значение 0, что означает успешное выполнение программы.