Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Вывод предложений из файла


Автор: Disite77 19.1.2016, 14:01
Помогите,пожалуйста,написать функцию вывода из файла предложений,в которых встречаются цифровые символы.Уже всю голову сломал,никак не выходит.Попробовал накидать часть проги,но она не работает(
Код

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
 
using namespace std;
char *filetr="C:\\text.txt";
void ReadFile()
{
    string s;
    int end,begin=0,pos;
    ifstream fileStream(filetr);
    while (!fileStream.eof())
        {
     getline(fileStream,s);//Построчное считывание информации в S
      while(1){
        end = s.find('.',begin); // поиск окончания предложения
        if( end == string::npos ) break; // если предложений нет
        pos = s.find( '4', begin ); // поиск цифрового символа
        if( pos < end ) // если в текущем предложении есть цифра
            cout.write( &s[begin], end-begin +1 ) << "\n"; // вывод предложения
        begin = end+1; // начало нового предложения
              }
        }
       fileStream.close();  //Закрыли открытый файл
}
int main()
{ setlocale(LC_ALL,"Russian");
    ReadFile();
   getch();
}

Заранее спасибо

Автор: rudolfninja 19.1.2016, 14:48
Я бы посоветовал вам поступить следующим образом: считать весь текст из файла в один большой буфер (это в случае есть файл небольшой). Затем этот буфер разбить на предложения (таким образом, сформировав массив предложений) и уже в этом массиве искать предложения с цифрами.
Если файл большой то читать построчно из файла информацию и записывать ее в буфер, пока в строке не будет символа конца предложения. Таким образом у вас будет предложение, которое сразу можно проверить на наличие цифры и вывести его на экран в нужно случае. Затем запоминать оставшуюся часть строки (которая после символа конца предложения) и снова читать информацию из файла в буфер, предварительно поместив в буфер начало следующего предложения.
В вашем коде если в первой строке есть цифра, но нет символа конца пердложения, то в итоге часть с цифрой будет потеряна.

Автор: Envy 20.1.2016, 15:23
Я не специалист по с++, но я бы сделал так:
(Если кто-нибудь скажет, как сделать лучше, буду очень благодарен)
Код

#include <fstream>
#include <iostream>
#include <cctype>       // std::isdigit

std::string tokenizer(std::fstream &cin) {    
    std::string sentence;
    char term;
    while(cin.get(term)) {
        sentence+=term;
        if (term == '.') {
            return sentence;
        }
    }
    return sentence;
}

bool has_numeric(const std::string &str) {
    for(auto it = str.cbegin(); it != str.cend(); ++it) {
        if (std::isdigit(*it)) {
            return true;
        }
    }
    return false;
}

int main(int argc, char** argv) {
    std::fstream fin;
    fin.open(argv[1], std::fstream::in);

    std::string sentence;
    while(1) {        
        sentence = tokenizer(fin);
        if (sentence.empty()) {
            break;
        }

        if (has_numeric(sentence)) {
            std::cout << sentence << std::endl;
        }
    }
    fin.close();
    return 0;
}


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Vyvod-predlozheny-iz-fayla-id569e17edae201531658b4567#findElement_E7045_569f7c55ae2015463a5f50e0_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)