Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
#1

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

04.07.2013, 20:46. Просмотров 446. Ответов 2
Метки нет (Все метки)

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 значений, особенно интересует как ускорить работу второго варианта.
0
Миниатюры
Как можно ускорить разбор значений в строке  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2013, 20:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как можно ускорить разбор значений в строке (C++):

Можно ли как нибудь ускорить работу цикла for? - C++
Подскажите пожалуйста - можно ли как нибудь ускорить работу цикла for? Заранее сильно благодарен!

Решето Эратосфена (сегмент): медленно работает - как можно ускорить? - C++
Подсчёт числа простых чисел в диапазоне от &quot;from&quot; до &quot;to&quot; typedef UINT64 Number; __device__ Number eratosthenesSingleBlock(const...

Что то в 14 строке не так?Как можно перезаписать? - C++
Что то в 14 строке не так?Как можно перезаписать? #include&lt;iostream&gt; #include&lt;cstdlib&gt; #include &lt;cmath&gt; #include &lt;clocale&gt; ...

Поиск количества слов строке(как можно проще) - C++
Здравствуйте.Я недавно начал изучать с++ и столкнулся с проблемой. Нужно написать программу поиска количества слов строке, но как можно...

Как правильно можно узнать количество хранимых в строке символов? - C++
Есть строка с юникод символами. Как правильно можно узнать количество хранимых в строке символов?int main() { std::wifstream...

Сумма всех цифр в строке. Как можно реализовать это в С++ ? - C++
Сумма всех цифр в строке.

2
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
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++;
        }
....
0
alsav22
5428 / 4823 / 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);
    }
...
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2013, 07:10
Привет! Вот еще темы с ответами:

Как в строке можно найти последнее слово, после которого идет точка - C++
Здравствуйте. Не могли бы подсказать,как в строке можно найти последнее слово, после которого идет точка. может есть какая то функция..?

Как можно осуществить замену слова в строке? (например, дом на мир и обратно) - C++
void dom(char*s){ while (*s) switch(*s) { case 'dom': *s++='mir'; break; case 'mir': *s++='dom'; break; default: s++; ...

Как ускорить работу? - C++
Прога ещё не доработана, сейчас интересует именно графический режим, когда нажимается клавиша 1-4 один из 4-х квадратов должен...

Как ускорить цикл? - C++
Вот фрагмент кода: int main() { for (;;) du(); system(&quot;pause&quot;); return 0; }


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.