Форум программистов, компьютерный форум CyberForum.ru

Вывести 10 самых длинных (по числу символов) предложений - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти причины и способы устранения ошибки http://www.cyberforum.ru/cpp-beginners/thread1637383.html
Во время откладки указатель на число выдает мусор типо -81791524 #include <stdlib.h> #include <time.h> #include <iostream> #include <conio.h> #include <cctype> using::std::cin; using::std::cout; using::std::endl;
C++ Как лучше всего пробежать все элементы контейнера? Речь о следующем. Есть vector. Я хочу пробежать все его элементы, но походу я буду проверять удовлетворяют они определенному условию или нет. Если да, то этот элемент удаляется. Как это лучше всего реализовать? http://www.cyberforum.ru/cpp-beginners/thread1637367.html
C++ Найти сумму ряда
Ребят, голову ломаю и никак не осилю. В чем смысл вообще? Я понять формулу даже не могу, не то что уж код написать здесь. Какие-то "-...+". Что это вообще? Помогите кто чем может.
Вычислить произведение отрицательных элементов массива C++
Приветствую вас дорогие форумчане. Прошу о помощи в изменении программы. В коде предоставленном ниже требуется заменить: рандомный подбор чисел на вводимый. Зарание спасибо! (Текст задания: В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1.) произведение отрицательных элементов массива; 2.) сумму положительных элементов массива, расположенных до максимального элемента....
C++ Реализовать структуру "Student" http://www.cyberforum.ru/cpp-beginners/thread1637333.html
Создайте программу для ввода и вывода фамилий и оценок студентов. Введите не менее 10 студентов. Отберите студентов, у которых вторая и четвертая оценка 2
C++ Есть ли готовая команда, чтобы циклически сдвинуть элементы в std::vector? Типа было (1,2,3) -> (3,1,2). подробнее

Показать сообщение отдельно
Subatik
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 20
15.01.2016, 12:07  [ТС]     Вывести 10 самых длинных (по числу символов) предложений
Ну вот смотрите, я хочу сделать из этого ф-ю. Условно назовем её "обработка файла".
Я пробывал и просто запускать ваш вариант, кстати в строке str2 = str.substr(0,pos); показывает ошибку, правильно ли я сделал что перед pos добавил sizeof? Пробывал свой так называемый запустить, тоже тщетно, он либо в темный экран встает(консоль ничего не делает) либо вылетает прекращая работу.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//Разбить файл на два: в один поместить четные строки, в другой - нечетные
 
#include "StdAfx.h"
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <iostream>
using namespace std;
 
void FileProc(char *fname) //Функция обработки файла
{
char *bufstr,b;//определение самой длиной строки в файле и кол во символов в ней для    того чтобы можно было спокойно перемещать в bufstr построчно
    int kol_sim_max=0,kol_sim=0,sh=strlen(fname),sh1=sh+7,c=1;
    FILE *f=fopen(fname,"rt");      // открыть файловый поток для
// чтения исходного файла 
while(!feof(f))             // пока не конец файла(ищем кол-во 
// символов в самой длиной строчке) 
        {
            b=fgetc(f);     // считывание символа из файла
// переменную b
            kol_sim++;          
            if(b=='\n'||feof(f))    
            {
                if(kol_sim_max<kol_sim)kol_sim_max=kol_sim;
                kol_sim=0;
            }
        }
    fclose(f);                  // закрываем файловый поток f
    bufstr=new char[kol_sim_max];
    char *fname1=new char[sh1];
    strcpy(fname1,fname);// Копирование имени файла в переменную Имени файла-результата1
    strcat(fname1,"-1.txt");
    FILE *f1=fopen(fname1,"wt");
    char *fname2=new char[sh1];
    strcpy(fname2,fname); // Копирование имени файла в переменную Имени файла-результата2
    strcat(fname2,"-2.txt");
    FILE *f2=fopen(fname2,"wt");
    FILE *fish=fopen(fname,"rt");
    while(!feof(fish))
        {
            fgets (bufstr,kol_sim_max,fish);
            if (!feof(fish))
            {
                if ((c % 2)==0)
                    fputs (bufstr,f2);
                else
                    fputs (bufstr,f1);
            }
            c++;
        }
    fclose(fish);
    fclose(f1); 
    fclose(f2); 
    delete []fname2;
    delete []fname1;
    delete []bufstr;
    remove(fname);
}
Нашел вот что то по типу такого, пытался как то внедрить ваш код, тщетно.
Хочу чтобы была функция на подобии этой но уже с "моими" условиями, то есть вывода 10 самых длинных предложений. И вопрос их можно например брать из одного текстовика в котором например большой текст и клать в другой текстовик уже именно эти 10 предложений?

Добавлено через 23 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <fstream>
#include <string>
#include <iostream>
#include <vector>
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <algorithm>
#pragma warning(disable:4996)
using namespace std;
clock_t StartTime, EndTime;
 
//Обработка файла
void FileProc(char * path){
    ifstream f(path);
    vector<string> vec;
    string str;
    while (!f.eof()) {
        getline(f, str);
        do{
            auto pos = find(str.begin(), str.end(), '.');
            string str2;
            if (pos != str.end()){
                str2 = str.substr(0, sizeof pos);
            }
            else{
                vec.push_back(str2);
            }
        } while (find(str.begin(), str.end(), '.') != str.end());
    }
    sort(vec.begin(), vec.end(), [](string str1, string str2)  { return str1.size() < str2.size(); });
    auto pos = vec.rend();
    for (int i = 0; i < 10; i++, ++pos) {
        cout << *pos << endl;
    }
    f.close();
}
void main(int argc, char *argv[])
{
    setlocale(0, "russian");
    bool such = true, povt = true;      // Переменные для проверки файлов
    clock_t StartTime, EndTime; // Время начала и завершения
    // обработки
    StartTime = clock();            // Запомнили время начала обработки
    if (argc <2)                // Если не указаны файлы, то вывести сообщение об ошибке
    {
        cout << "Не указаны файлы!!!\n";
    }
    else
    {
        for (int i = 1; i <= argc - 1; i++)
        {
            for (int j = i + 1; j <= argc - 1; j++)
            {
                if (stricmp(argv[i], argv[j]) == 0)
                    povt = false;           // Проверка и установка признака ошибки повтора файлов
            }
            ifstream f(argv[i]);
            if (f)
                f.close();      // Если открыт, то закрыть 
            else
                such = false;   // Иначе установить признак ошибки отсутствия файлов
        }
        if (such == false || povt == false) // Если файл не существует или есть повторяющиеся имена файлов 
        {
            if (such == false)  // Если файл не существует, то вывести 
                cout << "Какого-то файла не существует\n";
            else                // Иначе вывести 
                cout << "Имена каких-то файлов совпадают\n";
        }
        else
        for (int i = 1; i <= argc - 1; i++)
        {
            FileProc(argv[i]);  //Вызов функции обработки файла
        }
    }
    EndTime = clock();              // Запомнили время окончания обработки
        cout << "Elapsed Time " << (EndTime - StartTime) << " ms" << endl; //Вывод продолжительности обработки и завершение программы
    getch();
}
Вот что пытался сделать я
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru