• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Потоки

  • Автор темы Ilias
  • Дата начала
I

Ilias

Помогите,пожалуйста!Написать программу, которая считывает текст из файла и выводит на экран только предложения, начинающиеся с тире, перед которым могут находиться только пробельные символы.(С++).

Вот я начал:

C++:
char str[250]=" ",str2[250];
int i=0;
FILE *f, *fo;
if((f = fopen("d:\\files.txt", "r")) == 0)
{cout << "Ошибка чтения файла";
return 1;
}
while(!feof(f))
{
str[i]= fgetc(f);
i++;
}
cout<< str;
 
L

lazybiz

Хм.. Круто. Я так понимаю идет считывание в несколько потоков без функции main с последующей возможностью усовершенствования кода.
 
I

ierofant

Из C++ в вашем коде только cout.
Вот чтение из файла в строку, но её разбиение и вывод проведите сами, уж больно неприятное задание, мне просто лень :facepalm: :
C++:
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>

typedef std::istreambuf_iterator<char> Itr;

int main ()
{
std::ifstream in ("file");
if (in)
{
std::string str;
std::copy (Itr (in), Itr (), std::back_inserter (str));
in.close ();

std::cout << str << std::endl;							 // Это для демонстрации, что всё прочитано, из программы можно убрать
}
else std::cout << "Ошибка чтения файла" << std::endl;

return 0;
}
 
I

Ilias

В строку моя программа прекрасно считывает.Помощь требуется в выводе нужного.
 
I

ierofant

Сдаётся мне, что если в файле будет больше 250-ти символов (что отнюдь не редкость), то всё перестанет быть таким уж прекрасным... :)
 
R

Rififi

Ilias

Помощь требуется в выводе нужного.

а что непонятно?
не знаешь как определить whether предложение начинается с тире?
 
I

Ilias

Сдаётся мне, что если в файле будет больше 250-ти символов (что отнюдь не редкость), то всё перестанет быть таким уж прекрасным... :)

Используется файл с такой строчкой:Hello!My name Vasia. -What?Vasia! -Yes.Не думаю что тут больше 250-ти символов :rolleyes:

Добавлено:
Ilias

Помощь требуется в выводе нужного.

а что непонятно?
не знаешь как определить whether предложение начинается с тире?

Значит не знаю,раз спрашиваю.Тут кроме тире ещё и пробелы.Образец я привел.
 
I

ierofant

Надо стремится к универсальности. Зачем тогда аж 250 символов, если вы только на это предложение нацелены?
 
L

lazybiz

Догадайся куда подставить.
C++:
int n = -1;
...
while ( str[n+++1] == ' ' );
if ( str[n] == '-' ) {
str[i] = '\0';
printf( "%s\n", str );
}
 
I

Ilias

Догадайся куда подставить.
C++:
int n = -1;
...
while ( str[n+++1] == ' ' );
if ( str[n] == '-' ) {
str[i] = '\0';
printf( "%s\n", str );
}

Так?

C++:
char str[250]=" ";
int i=0,n = -1;
FILE *f;
if((f = fopen("d:\\files.txt", "r")) == 0)
{cout << "Ошибка чтения файла";
return 1;
}
while(!feof(f))
{
str[i]= fgetc(f);
i++;
}
cout<< str;
while ( str[n+++1] == ' ' );
if ( str[n] == '-' ) {
str[i] = '\0';
printf( "%s\n", str );
}


Но результата нет :)
 
L

lazybiz

1. меняй
fopen("d:\\files.txt", "r")
на
fopen("d:\\files.txt", "rb")

2. зачем нужна следующая строка я так и не понял.
cout<< str;

3. прикрепи files.txt

Да, и черт побери что означает:
Но результата нет em9.gif
?!!???? А что есть? У тебя хоть "cout<< str" что-нибудь выводит?
 
I

Ilias

1. меняй
fopen("d:\\files.txt", "r")
на
fopen("d:\\files.txt", "rb")

2. зачем нужна следующая строка я так и не понял.
cout<< str;

3. прикрепи files.txt

Да, и черт побери что означает:
?!!???? А что есть? У тебя хоть "cout<< str" что-нибудь выводит?

Поменял.
cout<< str показывает,как считались строки.Выводит всё правильно,как в файле.
Результата нет-т.е. в работе программы ничего не изменилось.Как выводила строку из файла,так и выводит.Ничего не поменялось. link removed
 
L

lazybiz

Я не вижу прикрепленный файл. Выкладывай еще раз и исходник целиком.
 
I

Ilias

Я не вижу прикрепленный файл. Выкладывай еще раз и исходник целиком.

C++:
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
#include <fstream.h>
#include <windows.h>
#include <string.h>

char bufRus[256];
char* RUS(const char*text)
{
CharToOem(text,bufRus);
return bufRus;
}
#pragma argsused
int main(int argc, char* argv[])
{
char str[250]=" ";
int i=0,n = -1;
FILE *f;
if((f = fopen("d:\\files.txt", "rb")) == 0)
{cout << "Ошибка чтения файла";
return 1;
}
while(!feof(f))
{
str[i]= fgetc(f);
i++;
}
cout<< str;
while ( str[n+++1] == ' ' );
if ( str[n] == '-' ) {
str[i] = '\0';
printf( "%s\n", str );
}

getch();
return 0;
}
 

Вложения

  • files.txt
    39 байт · Просмотры: 188
L

lazybiz

Не верно понял задание...
C++:
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>

char	bufRus[256];

char* RUS( const char *text )
{
CharToOem( text, bufRus );
return bufRus;
}

int main()
{
char	str[250] = " ";
int		i = 0, n = -1, flag;
FILE *	f;

if ( (f = fopen( "files.txt", "rb" )) == 0 ) {
cout << "Can\'t open file" << endl;
return 1;
}

while ( !feof( f ) ) {
str[i] = (char)fgetc( f );
i++;
}

fclose( f );

while ( n < i ) {
while ( str[n+++1] == ' ' );

flag = 0;
if ( str[n] == '-' ) flag = 1;

while ( str[n] != '.' && str[n] != '!' && str[n] != '?' ) {
if ( flag ) cout << str[n];
n++;
}
if ( flag ) cout << str[n] << endl;
}

getch();

return 0;
}
 
I

Ilias

Не верно понял задание...
C++:
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>

char	bufRus[256];

char* RUS( const char *text )
{
CharToOem( text, bufRus );
return bufRus;
}

int main()
{
char	str[250] = " ";
int		i = 0, n = -1, flag;
FILE *	f;

if ( (f = fopen( "files.txt", "rb" )) == 0 ) {
cout << "Can\'t open file" << endl;
return 1;
}

while ( !feof( f ) ) {
str[i] = (char)fgetc( f );
i++;
}

fclose( f );

while ( n < i ) {
while ( str[n+++1] == ' ' );

flag = 0;
if ( str[n] == '-' ) flag = 1;

while ( str[n] != '.' && str[n] != '!' && str[n] != '?' ) {
if ( flag ) cout << str[n];
n++;
}
if ( flag ) cout << str[n] << endl;
}

getch();

return 0;
}

Теперь после компиляции мигнет окном и всё :ya_lamo: В чём дело?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!