Потоки

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

Ilias

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

Вот я начал:

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;
 

lazybiz

Well-known member
03.11.2010
1 339
0
#2
Хм.. Круто. Я так понимаю идет считывание в несколько потоков без функции main с последующей возможностью усовершенствования кода.
 
I

ierofant

#3
Из 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

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

ierofant

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

Rififi

#6
Ilias

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

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

Ilias

#7
Сдаётся мне, что если в файле будет больше 250-ти символов (что отнюдь не редкость), то всё перестанет быть таким уж прекрасным... :)
Используется файл с такой строчкой:Hello!My name Vasia. -What?Vasia! -Yes.Не думаю что тут больше 250-ти символов :rolleyes:

Добавлено:
Ilias

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

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

ierofant

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

lazybiz

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

Ilias

#10
Догадайся куда подставить.
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 );
}

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

lazybiz

Well-known member
03.11.2010
1 339
0
#11
1. меняй
fopen("d:\\files.txt", "r")
на
fopen("d:\\files.txt", "rb")

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

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

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

Ilias

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

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

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

Да, и черт побери что означает:
?!!???? А что есть? У тебя хоть "cout<< str" что-нибудь выводит?
Поменял.
cout<< str показывает,как считались строки.Выводит всё правильно,как в файле.
Результата нет-т.е. в работе программы ничего не изменилось.Как выводила строку из файла,так и выводит.Ничего не поменялось. Посмотреть вложение 4466
 

lazybiz

Well-known member
03.11.2010
1 339
0
#13
Я не вижу прикрепленный файл. Выкладывай еще раз и исходник целиком.
 
I

Ilias

#14
Я не вижу прикрепленный файл. Выкладывай еще раз и исходник целиком.
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;
}
 

Вложения

  • 39 байт Просмотры: 15

lazybiz

Well-known member
03.11.2010
1 339
0
#15
Не верно понял задание...
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

#16
Не верно понял задание...
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: В чём дело?