Посимвольное Считывание Из Файла

Тема в разделе "C/C++/C#", создана пользователем Polinka, 21 июн 2012.

  1. Polinka

    Polinka Гость

    Задание: С помощью текстового редактора создать файл,содержащий текст, длина которого не превышает 700 символов(длина строки не должна превышать 70 символов).
    Имя файла должно иметь расширение dat.Написать программу,которая:
    -выводит текст на экран дисплея;
    -по нажатию произвольной клавиши выделяет в тексте заданное слово(ввести слово с клавиатуры);
    -выводит текст на экран дисплея еще раз, заключая данное слово в кавычки.


    Как сделать поиск посимвольно в файле текста (у меня в программе построчно)?
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"код С++"</div></div><div class="sp-body"><div class="sp-content">#include <iostream>
    #include <fstream>

    using namespace std ;

    /*
    В одной из папок проекта, точно не помню в какой, должен лежать файл in.txt с текстом.
    Введённая фраза выделяется кавычками (") по бокам.
    */

    const int STR_LEN = 257 ;

    void menu(ifstream& in) {
    int action(1) ; //переменная для выборай действия
    while(action) {
    system("cls") ; //очищаем каждый раз экран переди даилогом
    cout << "Что вы хотите сделать?" << endl
    << "1 - Вывести текст." << endl
    << "2 - Вывести текст с выделенной фразой." << endl
    << ">: " ;
    cin >> action ;
    switch(action) {
    case 1 : {
    char str[STR_LEN] ;
    str[STR_LEN-1] = '\0' ;
    in.clear() ; //сбрасываем все флаги ошибок, это нужно, если до этого при чтении достигался конец файла
    in.seekg(0) ; //устанавливаем позицию чтения в начало файла
    while(!in.eof()) { //в цикле проверяем не достигнут ли конец файла
    if (in.fail()) { //если строка будет длиннее 256 символов
    in.clear() ; //сбрасываем флаги ошибок
    }
    in.getline( str, STR_LEN-1 ) ; //засовываем в str строку длинной 256 символов из потока in
    cout << str << endl ; //выводим на экран считанную строку
    }
    system("pause") ;
    break ;
    }
    case 2 : {
    cin.get() ;
    cout << "Введите фразу для выделения: " ;
    const int length = 30 ; //длинна фразы для выделения
    char fraza[length] ;
    cin.getline(fraza, length-1) ;
    char str[STR_LEN] ;
    str[STR_LEN-1] = '\0' ;
    in.clear() ; //то же самое, что в case 1
    in.seekg(0) ; //устанавливаем указатель считывания в положение 0 (начало файла)
    while(!in.eof()) {
    if (in.fail()) {
    in.clear() ;
    }
    in.getline( str, STR_LEN-1 ) ;
    int pos ;
    pos = strstr(str, fraza)- str ; //ищем позицию вхождение искомой строки в строке, считанной из файла
    //в случае не нахождения строки strstr() возвращает -1
    if ( pos >= 0 ) { //если находим такую строку
    for ( int i=0 ; i<pos ; i++ ) //выводим часть строки до искомой фразы
    cout << str ;
    cout << '"' << fraza << '"' ; //выводим выделенную искому фразу
    for ( int i=pos+strlen(fraza) ; str ; i++ ) { //выводим остаток строки
    cout << str ;
    }
    cout << endl ;
    }
    else //если не находим вхождения, просто выводим строку
    cout << str << endl ;
    }
    system("pause") ;
    break ;
    }
    default :
    action = 0 ;
    }
    }
    }
    int main ( int argc, char* argv[] ) {
    setlocale ( LC_ALL, "RUSSIAN" ) ;

    char inPatch[] = "in.txt" ; //название файла для открытия в относительнйо виде (c:/folder/123.txt - абсолютный)
    ifstream in(inPatch) ; //создаём объект потокового класса ifstream (input file stream - входной файловый поток)
    if(!in) { //проверяем открылся ли файл
    cout << "Error opening file " << inPatch << '.' << endl ;
    system("pause") ;
    return 1 ;
    }
    menu(in) ; //вызываем меню для этого объекта
    return 0 ;
    }
     
Загрузка...

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