1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Потоки

Тема в разделе "Вопросы новичков и не только", создана пользователем Ilias, 13 апр 2011.

  1. Ilias

    Ilias Гость

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

    Вот я начал:

    Код:
    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;
     
  2. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Хм.. Круто. Я так понимаю идет считывание в несколько потоков без функции main с последующей возможностью усовершенствования кода.
     
  3. ierofant

    ierofant Гость

    Репутация:
    0
    Из C++ в вашем коде только cout.
    Вот чтение из файла в строку, но её разбиение и вывод проведите сами, уж больно неприятное задание, мне просто лень :facepalm: :
    Код:
    #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;
    }
     
  4. Ilias

    Ilias Гость

    Репутация:
    0
    В строку моя программа прекрасно считывает.Помощь требуется в выводе нужного.
     
  5. ierofant

    ierofant Гость

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

    Rififi Гость

    Репутация:
    0
    Ilias

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

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

    Ilias Гость

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

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

    ierofant Гость

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

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Догадайся куда подставить.
    Код:
    int n = -1;
    ...
    while ( str[n+++1] == ' ' );
    if ( str[n] == '-' ) {
    str[i] = '\0';
    printf( "%s\n", str );
    }
     
  10. Ilias

    Ilias Гость

    Репутация:
    0
    Так?

    Код:
    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 );
    }

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

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    1. меняй
    fopen("d:\\files.txt", "r")
    на
    fopen("d:\\files.txt", "rb")

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

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

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

    Ilias Гость

    Репутация:
    0
    Поменял.
    cout<< str показывает,как считались строки.Выводит всё правильно,как в файле.
    Результата нет-т.е. в работе программы ничего не изменилось.Как выводила строку из файла,так и выводит.Ничего не поменялось. Посмотреть вложение 4466
     
  13. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Я не вижу прикрепленный файл. Выкладывай еще раз и исходник целиком.
     
  14. Ilias

    Ilias Гость

    Репутация:
    0
    Код:
    #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 байт
      Просмотров:
      14
  15. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Не верно понял задание...
    Код:
    #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;
    }
     
  16. Ilias

    Ilias Гость

    Репутация:
    0
    Теперь после компиляции мигнет окном и всё :ya_lamo: В чём дело?
     
  17. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    поставь путь правильный т.е.: "d:\\files.txt"
     
Загрузка...
Похожие Темы - Потоки
  1. motogarri
    Ответов:
    2
    Просмотров:
    144
  2. Mady
    Ответов:
    3
    Просмотров:
    1.588
  3. 203
    Ответов:
    4
    Просмотров:
    1.835
  4. Senset
    Ответов:
    0
    Просмотров:
    2.412

Поделиться этой страницей