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

Подскажите как прогу допилить. Выборка цитат из текста. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа с текстовыми файлами http://www.cyberforum.ru/cpp-beginners/thread398169.html
Во входной файл подается текст вида: aaabcbbffff В исходной файле получается: 3аbc2b4f простейшая компоновка получается. #include "stdafx.h" #include <fstream> using namespace std; int _tmain(int argc, _TCHAR* argv)
C++ Функция которая принимает целое беззнаковое число. Вообщем надо написать функцию которая принимает целое беззнаковое число и возвращает true, если число четное и false в противном случае. #include <iostream.h> #include <math.h> void main () http://www.cyberforum.ru/cpp-beginners/thread398167.html
C++ Сглаживание матрицы
Народ, помогите пожалуйста с задачей. Никак не могу справиться. Условие на скриншоте. Вариант 9. Заранее спасибо. Соседями элемента Ак в матрице назовем элементы Аkl c i–1 ≤ k ≤ i+1, j–1 ≤ l ≤ j+1, (k, l) ≠ (i, j). Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной...
Трёхзначное число C++
Составить программу, которая раскладывает ро розрядным единицам трёхзначное число, которое вводит пользователь с клавиатуры. #include <iostream.h> #include <conio.h> main() { int x, a, b, c; cout<<"Vvedite truznachne chislo: "; cin>>x; a=x/100;
C++ Строки символов . Текстовые файлы... http://www.cyberforum.ru/cpp-beginners/thread398135.html
всем доброго времени суток! Помогите пожалуйста написать программу(кто может)...буду очень благодарен... Выполнить следующие задания: 1. Найти количество слов во фразе. 2. Найти в фразе слова-палиндромы 3. Во фразе поменять местами два слова. 4. Во фразе заменить одно слово другим. 5. Во фразе продублировать буквы слов. 6. В текстовом файле определить количество слов.
C++ Все возможные комбнинации элементов массива Всем привет! Есть массив char array (s - размер массива). Нужно написать прогу, которая выведет все возможные КОМБИНАЦИИ элементов этого массива и выведет результат на экран. Например, если в массиве строка abc то прога должна вывести что-то такое: ab ac bc abc подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
04.12.2011, 11:38     Подскажите как прогу допилить. Выборка цитат из текста.
Цитата Сообщение от Валентин^_^ Посмотреть сообщение
а вот нужно обработать эту ситуацию! если так, то нужно создать новый массив большего размера, перезаписать его содержимым старого масива, удалить старый, указателю на старый массив присвоить новый..
- это можно осуществить в try{}catch(...){} блоке - принцип ниже
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
long bufsize = 8;
bool bOK = false;
char *str = NULL;
long pos = ifs.tellg();
while(!bOK)
{
    try
    {
        str= new char[bufsize];
        if(ifs.getline(str))//Если считывание ОК в catch не попадём
            bOK = true;//И условие окончания станет ДА
    }
    catch(...)
    {
        ifs.clear();//Нужно сбросить ошибки
        ifs.seekg(pos,ios::beg);//Отматываем обратно
        bufsize *= 2;
    }
}
Всё же я написал "человеческий" на мой взгляд вариант:
Текст считывается за 1 проход - оптимальней вряд ли с char-овским массивом вообще можно!
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
#include <iostream>
#include <fstream>
using namespace std;
 
long streamfind(ifstream &ifs, char smb, long pos)
{
    char ch;
    long lpos = -1;
    ifs.clear();
    ifs.seekg(pos,ios::beg);
    if(pos == ifs.tellg())
    {
        while(!ifs.eof() && lpos == -1)
        {
            ifs.get(ch);
            if(ch == smb)
                lpos = ifs.tellg();
        }
    }
    return lpos;
}
 
char * streamsubstr(char * str, ifstream &ifs, long pos, long len)
{
    ifs.seekg(pos,ios::beg);
    if(pos == ifs.tellg())
    {
        if(!(str = new char [len]))
            cout<<"Allocation memory error\n";
        else
            ifs.getline(str,len);
    }
    return str;
}
 
 
int main()
{
    int bpos, lpos;
    char * str;
    system("chcp 1251");
    ifstream ifs("file.txt");
    if(!ifs)
        cout<<"Error open file.txt\n";
    else
    {
        cout<<"Citates in text : \n";
        lpos = -1;
        while((bpos = streamfind(ifs,'"',lpos + 1)) != - 1)
        {
            if((lpos = streamfind(ifs,'"',bpos + 1)) != - 1)
            {
                if((str = streamsubstr(str,ifs,bpos,lpos - bpos)))
                {
                    cout<<str<<endl;
                    delete [] str;
                }
            }
            else
                break;
        }
        ifs.close();
    }
    system("pause");
    return 0;
}
PS:Я не стал писать алгоритм с try catch из принципа - это всё равно что находить 2*2 как корень кубичский из 64, сложность выше а эффективность таже - зачем сразу закладывать в алгоритм исключительные ситуации???Алгоритмы строят так, чтобы самой логикой построения не допускать исключений, а вы просите генерировать их - это не гуд!
Миниатюры
Подскажите как прогу допилить. Выборка цитат из текста.  
 
Текущее время: 08:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru