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

Как можно ускорить разбор значений в строке - C++

Восстановить пароль Регистрация
 
Ko
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
04.07.2013, 20:46     Как можно ускорить разбор значений в строке #1
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <iostream>
#include <fstream> 
#include <sstream>
#include <vector> 
#include <string>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <omp.h>
#include "cilk/cilk.h"
#include <map>
#include <set>
#include <iomanip>
#include "windows.h"
using namespace std;
 
 
int main()
{
    ifstream file_data_load( "Zo.bub" );
    string data_load = "";
    string str_last =""; // для вывода последнего значения 
    //////////////////////////////////////////////////////////////////////////
    float duration;
    clock_t start, finish;
    start = clock();
    //////////////////////////////////////////////////////////////////////////
    if ( file_data_load.is_open() )
    while (!file_data_load.eof())
    {
        getline( file_data_load, data_load );
        string str_load = "";
        int i_step = 0;
        for (int i = 0; i < data_load.size(); i++)
        {
            if (str_load.size() > 0)
                if ( data_load[i] == ' ' || i == data_load.size()-1 )
                {
                    if ( data_load[i] != ' ' && i == data_load.size()-1) str_load += data_load[i];
                    
                    if( i_step == 1 ) str_last = str_load;  // тут загрузка каких то значений куда либо
 
                    str_load ="";
                    i_step++;
                    continue;
                }
                str_load += data_load[i];
        }   
        data_load = "";
    }
 
    cout << "str_last: " << str_last << endl;
    //======================
    finish = clock();
    duration = (float)(finish - start) / CLOCKS_PER_SEC;
    start = clock();
    //======================
    cout <<" work_time: " << duration  << endl;
    //======================
    file_data_load.close();
 
    data_load = "";
    str_last =""; 
    ifstream file_data_load1( "Zo.bub" );
 
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
 
    //////////////////////////////////////////////////////////////////////////
    float duration1;
    clock_t start1, finish1;
    start1 = clock();
    //////////////////////////////////////////////////////////////////////////
    if ( file_data_load1.is_open() )
    while (!file_data_load1.eof())
    {
        getline( file_data_load1, data_load );
        stringstream s(data_load);
        string temp = "";
        int i_step = 0;
        while (!s.eof())
        {
            s >> temp;
            if (temp.empty()) break;
            if (i_step == 1)str_last = temp;
            temp.clear();
            i_step++;
        }
    }
    cout << "str_last: " << str_last << endl;
    //======================
    finish1 = clock();
    duration1 = (float)(finish1 - start1) / CLOCKS_PER_SEC;
    start1 = clock();
    //======================
    cout <<" work_time: " << duration1  << endl;
    //======================
    file_data_load1.close();
}

представлены два метода обработки строк типа "555 155714 0 0 0" этих строк 53 305 069, между значениями 1 пробел сразу договоримся и вместо цифер могут быть слова, как максимально быстро извлечь и в данном случае 5 значений, особенно интересует как ускорить работу второго варианта.
Миниатюры
Как можно ускорить разбор значений в строке  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2013, 20:46     Как можно ускорить разбор значений в строке
Посмотрите здесь:

Поиск количества слов строке(как можно проще) C++
Как ускорить работу? C++
C++ Можно ли как нибудь ускорить работу цикла for?
C++ Как в строке можно найти последнее слово, после которого идет точка
C++ Как правильно можно узнать количество хранимых в строке символов?
C++ Сумма всех цифр в строке. Как можно реализовать это в С++ ?
C++ Как можно осуществить замену слова в строке? (например, дом на мир и обратно)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ko
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
04.07.2013, 20:59  [ТС]     Как можно ускорить разбор значений в строке #2
грубо говоря как вот это сделать быстрей
.....
C++
1
2
3
4
5
6
7
8
       while (!s.eof())
        {
            s >> temp;
            if (temp.empty()) break;
            if (i_step == 1)str_last = temp;
            temp.clear();
            i_step++;
        }
....
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 07:10     Как можно ускорить разбор значений в строке #3
Добавлено через 1 час 28 минут
Цитата Сообщение от Ko Посмотреть сообщение
грубо говоря как вот это сделать быстрей
Как это быстрей сделать не знаю, но как быстрей считать второе слово в строке:
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
...
    float duration1;
    clock_t start1, finish1;
    start1 = clock();
    
    ifstream file_data_load1( "Zo.bub" , ios::in | ios::binary);
    if (file_data_load1.is_open())
    {
        while (!file_data_load1.eof())
        {
              file_data_load1.ignore(255, ' ');
              getline(file_data_load1, str_last, ' ');
              file_data_load1.ignore(255, '\n');
       }
        cout << "str_last: " << str_last << endl;
    
        finish1 = clock();
        duration1 = (float)(finish1 - start1) / CLOCKS_PER_SEC;
        
        cout <<" work_time: " << duration1  << endl;
    
        file_data_load1.close();
    }
...
Добавлено через 28 минут
Так ещё быстрей:
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
...
    float duration1;
    clock_t start1, finish1;
    start1 = clock();
    
    char str[50];
    char temp[255];
    
    FILE *f = fopen("Zo.bub", "rb");
    
    if (f)
    {
        while (!feof(f))
        {
             while (fgetc(f) != ' ' && !feof(f));
             fscanf(f, "%s", str);
             fgets(temp, 255, f);
        }
        cout << "str_last: " << str << endl;
    
        finish1 = clock();
        duration1 = (float)(finish1 - start1) / CLOCKS_PER_SEC;
        
        cout <<" work_time: " << duration1  << endl;
    
        fclose(f);
    }
...
Yandex
Объявления
05.07.2013, 07:10     Как можно ускорить разбор значений в строке
Ответ Создать тему
Опции темы

Текущее время: 21:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru