Нахождение самого длинного слова в строке

Рейтинг: 1Ответов: 1Опубликовано: 03.05.2015

Здравствуйте У меня есть проблема, есть код, но он работает не совсем так как надо.

Задание: Создать текстовый файл. Слова в файле отделены пробелами , запятыми , точками. В каждом предложении определить самое длинное слово. Создать новый текстовый файл , в котором каждое предложение размещается в отдельной строке и начинается с числа , равной длине самого длинного слова в нем, по которым идет именно это слово. Вывести содержимое исходного и созданного файлов.

Код:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string>
#include <conio.h>
#include <Windows.h>
#include <sstream>

using namespace std;

void infile(char*);
void outfile(char*);
void result(char*, char*);

int main(){
    setlocale(LC_ALL, "rus");
    char* f1 = "f1.txt";
    char* f2 = "f2.txt";
    infile(f1);
    result(f1, f2);
    outfile(f1);    
    outfile(f2);
    system("pause");
    return 0;
}


void infile(char* name) { //Ф-ия заполнения файла. 
    string str;
    ofstream file(name);
    cout << "Заполните файл " << name << ":\n";
    while (true) {
        if (!GetAsyncKeyState(VK_INSERT)) {
            getline(cin, str);
            file << str << "\n";
        }
        else
            break;
    }
    file.close();
}

void outfile(char* name) {  //Ф-ия вывода содержимого файла. 
    string str;
    ifstream file(name);
    cout << "\nСодержание файла " << name << ":\n";
    while (getline(file, str)) {
        cout << str << endl;
    }
    file.close();
}

void result(char* name1, char* name2) {  //Ф-ия поиска самого длинного слова в файле.
    string str;
    ofstream file2(name2);
    ifstream file1(name1);
    while (getline(file1, str)) { //Записываем файл в строку str
        istringstream ss(str);
        string sentence;
        while (getline(ss, sentence, '.')) {  //Записываем в строку, подстроку до разделителя(вот тут ошибка, как я понимаю)
            istringstream ws(sentence);
            string curr, longest;
            while (ws >> curr)  
                if (curr.size() > longest.size()) 
                    longest = curr
            sentence = sentence.substr(sentence.find_first_not_of(" "));    
            file2 << longest.size() << " | " << longest << " | " << sentence << endl;
        }  
    }
    file1.close();
    file2.close();
}

Проблема заключается в том, что когда заполняешь первый файл, и делаешь перенос строки нажатием кнопки "Enter", программа считает что это конец предложения, хотя, конец должен быть только там где точка.

Ответы

▲ 3
void file_stat(istream& i, ostream& o){
   string t, s;
   int    c;

   do {

     c = i.get();
     if((c == '.') || (c == '!') || (c == '?')){

        if(t.length() > 0){
            o << t.length() << "\t|\t" << t.c_str();
            o << endl;
        }

        s = t = "";
    } else if(isalpha(c))
        s += c;
     else {
        if(s.length() > t.length())
            t = s;
        s = "";
     }

   } while(c != EOF);

   o.flush();
 }

 //***

 ifstream i("input.txt");
 ofstream o("output.txt");
 file_stat(i, o);
 i.close();
 o.close();

p.s. шпальте.