Программу С++ нужно переделать в С - C (СИ)
Формулировка задачи:
#include <iostream>
#include <string>
#include <cctype>
int main()
{
std::string str ;
std::getline ( std::cin , str ) ;
for ( std::string::size_type i = 0 ; i < str.size() ; ++i )
{
if ( std::ispunct ( str[i] ) && (i+1)<str.size() && !std::isspace(str[i+1]) )
{
str.insert(++i," ") ;
}
}
std::cout << "\n" << str << std::endl ;
}Решение задачи: «Программу С++ нужно переделать в С»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
enum constants {
MAX_LEN = 1024
};
int main() {
char line[MAX_LEN];
char result[MAX_LEN+MAX_LEN];
size_t i,j;
fgets(line, MAX_LEN, stdin);
for(i = 0, j = 0; line[i]; ++i, ++j) {
result[j] = line[i];
if(ispunct(line[i]) && line[i + 1] && (!isspace(line[i + 1]))) {
result[++j] = ' ';
}
}
result[j] = 0;
fputs(result, stdout);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами, строками и массивами.
- Объявление переменной
constantsтипаenum, которая содержит константуMAX_LENравную 1024. - Создание двух переменных типа
char:lineиresult.lineиспользуется для хранения строки, которую вводит пользователь.resultиспользуется для хранения результата обработки строки из пункта 4.
- Создание двух переменных типа
size_t:iиj, которые используются в цикле.- Переменная
iиспользуется для индексации строкиline. - Переменная
jиспользуется для индексации строкиresult.
- Переменная
- Считывание строки от пользователя с помощью функции
fgets(). - Начало цикла, который проходит по каждому символу строки
line. - В каждой итерации цикла символ
line[i]копируется в соответствующую позицию в строкеresult. - Если текущий символ является знакам пунктуации и следующий символ не является пробелом, то в следующую позицию в строке
resultзаписывается пробел. - После окончания цикла в последнюю позицию строки
resultзаписывается нулевой символ, который обозначает конец строки. - Результат выводится на экран с помощью функции
fputs(). - Программа завершается, возвращая 0 в качестве кода выхода.