Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
54 строки
1.8 KiB
C++
54 строки
1.8 KiB
C++
#include <iostream>
|
|
#include <fstream>
|
|
#include <string>
|
|
#include <cstring>
|
|
|
|
const size_t MAX_SIZE = 256;
|
|
const char* separators = " \r\n,.!?:;()-";
|
|
|
|
int main() {
|
|
std::ifstream inputFile("example_input.txt"); // Здесь "example_input.txt" - название файла для чтения
|
|
|
|
if (!inputFile.is_open()) {
|
|
std::cerr << "Ошибка открытия файла!" << std::endl;
|
|
return 1;
|
|
}
|
|
|
|
char text[MAX_SIZE];
|
|
|
|
// Считываем строку из файла
|
|
inputFile.getline(text, MAX_SIZE);
|
|
|
|
const char* start = text;
|
|
|
|
// Алгоритм разбиения строки на слова и их вывод
|
|
while (true) {
|
|
// Определить, сколько разделителей находятся в начале строки
|
|
const size_t separator_count = strspn(start, separators);
|
|
|
|
// Пропустить их
|
|
start += separator_count;
|
|
|
|
// Если достигнут конец строки, закончить работу
|
|
if (start[0] == '\0') {
|
|
break;
|
|
}
|
|
|
|
// Найти первый разделитель от нового начала строки (длину слова)
|
|
const size_t word_length = strcspn(start, separators);
|
|
|
|
// Напечатать часть строки от начала слова до разделителя
|
|
std::cout.write(start, word_length);
|
|
|
|
// Напечатать символ перевода строки
|
|
std::cout << '\n';
|
|
|
|
// Сдвинуть начало строки вперед на длину слова
|
|
start += word_length;
|
|
}
|
|
|
|
inputFile.close(); // Закрываем файл после использования
|
|
|
|
return 0;
|
|
}
|