С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 1000 символов (длина строки текста не должна превышать 70 символов). Имя файла должно иметь расширение DAT. Написать программу, которая:
выводит текст на экран дисплея;
определяет количество предложений текста и количество слов
в предложении;
по нажатию произвольной клавиши поочередно выделяет каждое предложение текста, а в выделенном предложении — поочередно все слова.
но когда я читаю этот самый файл, у меня почему то у некоторых слов съедается 1 буква, почему? хз, вот код
#include <iostream>
#include <fstream>
#include <string>
#include <unistd.h>
#include <random>
#include <time.h>
std::string *push(std::string* a, int &size, std::string pushed){
std::string *tmp = new std::string[++size];
for(int i = 0; i < size - 1; i++)
tmp[i] = a[i];
tmp[size - 1] = pushed;
return tmp;
}
int main(int args, char**argv){
srand(time(0));
int cntOffer = 0;
std::string *offer = new std::string[cntOffer];
std::ifstream in("datafile.dat");
int sizeColor = 6;
int color[6] = {91, 92, 93, 94, 95, 96};
// необходимые данные, например: кол-во слов в тексте (cntWord), cntOffer (Кол-во предложений в тексте)
int cntWord = 0;
if(in.is_open())
{
std::string line;
while(std::getline(in, line, '.'))
{
offer = push(offer, cntOffer, line);
}
// задание 1: вывод всего текста
for(int i = 0; i < cntOffer - 1; i++){
std::cout << offer[i] << std::endl;
}
// задание 2: найти кол-во преложений в тексте и найти кол-во слов в предложений
for(int i = 0; i < cntOffer - 1; i++){
for(int j = 0; offer[i][j] != '\0'; j++){
if(offer[i][j] == L' ')
cntWord++;
}
std::cout << "Предложение " << i << "\t|\tкол-во слов: " << cntWord << std::endl;
cntWord = 0;
}
std::cout << std::endl << std::endl;
// задание 3:
char c;
int random_index_color = rand() % sizeColor;
// вывод c помощью нажатий на клавиатуру
for(int i = 0; i < cntOffer - 1; i++)
{
fflush(stdout);
read(STDIN_FILENO, &c, 1);
std::string line_color_print;
for(int j = 0; offer[i][j] != '\0'; j++){
line_color_print += (std::string)"\033[" + std::to_string(color[random_index_color]) + (std::string)"m" + offer[i][j] + (std::string)"\033[0m";
if(offer[i][j] == ' '){
random_index_color = rand() % sizeColor;
j++;
}
}
std::cout << line_color_print << std::endl;
}
in.close();
}
return 0;
}
Всё работает, цвет каждого слова рандомный ( из 6 вбитых мной в массив ), по нажатию клавиши получается отобразить, но ПОЧТИ у каждого слова отсутсвует первая буква... ( текст в файле на английском )
Т.е. теперь не только ты помогаешь, а и все мы должны...
1 маленькая проблема решение которой в инете не нашёл :) заранее извиняюсь если отвлекаю
кажись понял :)
Стикер
0_о ничего себе, почему?
Стикер
Я её возвращаю ведь
Хорошо, а освобождает то кто?
А старая пропадает безследно...
точно, а вот на счёт tmp, не знаю
Может тебе не мучиться с этим вот дерьмом и использовать std::vector ?
не в пуш на строке где вызывается пуш
Препод не разрешает
напиши свой
tmp не пропадает, если результат функции куда-то пишется... (потом он всё равно пропадёт на следующем цикле)
ахаха, это тема где мы классы не прошли, тоже нельзя))
а почему std::string разрешает?
тем временем препод: о_O ачо в Смысле эток ласс?
Обсуждают сегодня