Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/55: Рейтинг темы: голосов - 55, средняя оценка - 4.67
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 129

Считывание целых чисел из файла в вектор

22.05.2017, 22:43. Показов 10506. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Встал вопрос о считывании целых чисел в вектор, но в файле всё char , как я понимаю. Какой самый производительный метод для считывания(считываение идёт по 1 цифре)? И как избежать перевода из char в int и засовывания в vector?

Пожалуйста объясняйте Ваше решение)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.05.2017, 22:43
Ответы с готовыми решениями:

Считывание целых чисел из файла
Всем привет! Есть задача: считать из файла целые числа (в файле может быть все, что угодно) и сохранить их сумму в новый файл, вот код: ...

Считывание целых чисел с файла (библиотека MFC)
Подскажите пожалуйста, как можно считывать с файла целые числа используя библиотеку MFC?

Считывание из файла массив целых чисел и действия над ним
помогите написать программу. Из файла (имя файла вводится с клавиатуры) считывается массив целых чисел. Размер массива заранее...

32
 Аватар для MisterR
69 / 68 / 52
Регистрация: 28.10.2015
Сообщений: 388
22.05.2017, 23:46
Цитата Сообщение от Валерий_ Посмотреть сообщение
Пожалуйста объясняйте Ваше решение)
C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
...
vector<int>vec;
    ifstream ifst("text.txt");
    char ch;
    while (!ifst.eof())
    {
        ifst >> ch;
        if (isdigit(ch))
            vec.push_back(ch - '0');
    }
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.05.2017, 00:08
Цитата Сообщение от Валерий_ Посмотреть сообщение
но в файле всё char , как я понимаю.
Операторы форматируемого чтения сделают необходимые преобразования. Предполагается, что в файле числа расположены через пробельные символы:
C++
1
2
3
4
5
6
7
8
9
10
    vector<int>vec;
    ifstream fin("text.txt"); 
    if (fin)
    {
        int n;
        while (fin >> n)
            vec.push_back(n);
     }
     else
       cout << "Error opening file!" << endl;
0
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 129
23.05.2017, 00:25  [ТС]
MisterR, Объясни построчно пожалуйста

Добавлено через 6 минут
Цитата Сообщение от nd2 Посмотреть сообщение
int n;
while (fin >> n)
vec.push_back(n);
Цикл пропускается хотя
C++
1
2
3
4
5
int k;
while (input>>k)
    {
        v.push_back(k);
    }
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.05.2017, 00:34
Цитата Сообщение от Валерий_ Посмотреть сообщение
Цикл пропускается
В смысле, "пропускается"?

Добавлено через 1 минуту
Цитата Сообщение от Валерий_ Посмотреть сообщение
хотя
Что, "хотя"?
0
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 129
23.05.2017, 00:40  [ТС]
nd2, насчёт "хотя" - не знаю, как оно там оказалось. В смысле проверяется условие цикла и оно не верно = нету вхождений в цикл(
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.05.2017, 00:46
Цитата Сообщение от Валерий_ Посмотреть сообщение
В смысле проверяется условие цикла и оно не верно = нету вхождений в цикл(
Откуда это видишь? Может в if() захода нет?

Добавлено через 48 секунд
Полный код покажи, который пробуешь. И содержимое файла, с которым пробуешь.
0
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 129
23.05.2017, 00:54  [ТС]
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#include <sstream>
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <math.h>
#include <string>
#include <fstream>
#include <vector>
#include <thread>
#include <iterator>
 
using namespace std;
 
 
 
 
void waiter(bool *quit) {
    string s;
    while (s!="quit")
    {
        getline(cin, s);
    }
    *quit=true;
};
 
 
void factorial_continue(bool *quit) {
    ifstream input("factorial.txt");
    string s;
    getline(input, s);
    getline(input, s);
    int n = atoi(s.c_str());
    getline(input, s);
    int ic = atoi(s.c_str());
    thread q(waiter, quit);
    q.detach();
    int k;
    unsigned int l=0;
    vector<int> v;
    while (input>>k) // вот это место
    {
        v.push_back(k);
    }
    for (int i = ic; i <= n; i++) {
        int r = 0;
        for (int j = 0; j < (int)v.size(); j++) {
            v[j] *= i;
            v[j] += r;
            r = v[j] / 10;
            v[j] %= 10;
        }
        while (r > 0) {
            v.push_back(r % 10);
            r /= 10;
        }
        if (*quit)
        {
            ofstream potok("factorial.txt", ios_base::trunc | ios_base::out);
            potok << 0 << endl << n << endl << i << endl;
            for (size_t i = 0; i < v.size(); ++i)
            {
                potok << v[i];
            }
            potok.close();
            cout << "Данные успешно сохранены в файл factorial.txt\n";
            return;
        }
    }
    string result;
    for (auto i = v.rbegin(); i != v.rend(); i++) {
        result += '0' + (*i);
    }
    ofstream potok("factorial.txt", ios_base::trunc | ios_base::out);
    potok << 1 << endl << n << endl << result;
    potok.close();
    cout << "Данные успешно записаны в файл factorial.txt\n";
    return;
}
 
 
void factorial(bool *quit) {
    int n;
    cout << "Введите число n! ";
    cin >> n;
    thread q(waiter, quit);
    q.detach();
    if (n < 0) return;
    if (n <= 1) {
        ofstream potok("factorial.txt", ios_base::trunc | ios_base::out);
        potok << 1 << endl<<1<<endl;
        potok.close();
    };
    std::vector<int> v = { 2 };
    for (int i = 3; i <= n; i++) {
        int r = 0;
        for (int j = 0; j < (int)v.size(); j++) {
            v[j] *= i;
            v[j] += r;
            r = v[j] / 10;
            v[j] %= 10;
        }
        while (r > 0) {
            v.push_back(r % 10);
            r /= 10;
        }
        if (*quit)
        {
            ofstream potok("factorial.txt", ios_base::trunc | ios_base::out);
            potok << 0 << endl << n << endl << i << endl;
            for (size_t i = 0; i < v.size(); ++i)
            {
                potok << v[i];
            }
            potok.close();
            cout << "Данные успешно сохранены в файл factorial.txt\n";
            return;
        }
    }
    string result;
    for (auto i = v.rbegin(); i != v.rend(); i++) {
        result += '0' + (*i);
    }
    ofstream potok("factorial.txt", ios_base::trunc | ios_base::out);
    potok << 1 << endl << n << endl << result;
    potok.close();
    cout << "Данные успешно записаны в файл factorial.txt\n";
    return;
}
 
 
void threaded_factorial(bool* quit) {
    thread m(factorial,quit);
    m.join();
}
 
 
 
 
 
 
int main(){
    setlocale(LC_ALL, "Russian");
    ifstream input("factorial.txt");
    int z = input.get()-48;
    bool quit=false;
    string s;
    /*if (input.peek() == EOF)
    {
        threaded_factorial(&quit);
    }
    else*/ if (z==1) {
        threaded_factorial(&quit);
    }
    else if (z==0)
    {
        getline(input,s);
        getline(input, s);
        cout << "Досчитать?"<<endl << "Прогресс " << s;
        getline(input, s);
        cout << " из " << s << endl;
        cout << "(1 - Yes, 0 - No) ";
        int dec;
        cin >> dec;
        if (dec == 0) {
            threaded_factorial(&quit);
        }
        else
        {
            factorial_continue(&quit);
        }
        
    }
    system("pause");
    return 0;
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.05.2017, 01:04
Цитата Сообщение от Валерий_ Посмотреть сообщение
C++
1
2
while (input>>k) // вот это место 
{ v.push_back(k); }
...
Цитата Сообщение от nd2 Посмотреть сообщение
И содержимое файла, с которым пробуешь.
Добавлено через 1 минуту
Цитата Сообщение от Валерий_ Посмотреть сообщение
C++
1
ifstream input("factorial.txt");
Открытие файла для чтения всегда проверять нужно.
Цитата Сообщение от Валерий_ Посмотреть сообщение
C++
1
2
3
4
getline(input, s); 
getline(input, s); 
int n = atoi(s.c_str()); 
getline(input, s);
К чему здесь чтение строк, если в файле целые числа?
0
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 129
23.05.2017, 01:12  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Сообщение от Валерий_
getline(input, s);
getline(input, s);
int n = atoi(s.c_str());
getline(input, s);
К чему здесь чтение строк, если в файле целые числа?
Двигаться по строкам, ведь числа которые нужны в вектор только с 4 строчки.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.05.2017, 01:17
Цитата Сообщение от Валерий_ Посмотреть сообщение
Двигаться по строкам, ведь числа которые нужны в вектор только с 4 строчки.
Очень интересно. Это когда-нибудь сделаешь или ограничишься рассказами о содержимом файла?
Цитата Сообщение от nd2 Посмотреть сообщение
И содержимое файла, с которым пробуешь.
0
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 129
23.05.2017, 01:19  [ТС]
0
30000
1831
0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000004458470445338559543413729 6457310896052676530641094027327593000129 4099869942172768082425139065749115450875 6390225920305920119844014221204176110495 8648728742498416943590688987979899594039 8135795033876491677451564543960857935957 2680493080228438226757677869540828983928 5071891209511775651140522216249617102525 7918650047321504686558559028782265018552 6517731279949339129244296560864515045277 5106505069085503710735496081440354852979 2914782359816803303790551241093798529929 8427853328985284468071629358235730417523 8373414104250808657278454698534001969551 9179737278697387440267011863167573801776 5117859493026736360272798238540388327699 2782659590698033298040726222362658123574 0883299869227850196521871397429769426376 8724978316573363749190324592577047211132 7432544797469517374273811790629365618917 3856823942354502547961306259063555693613 1458992828451476919428647637205671420581 6918278310774820717919807540199855276438 7975757984974834015235881198035805355382 8089307251553677179197197633020685409624 0965176319486218877573479605920988892637 9202071474033553969937247164815438261943 1493080830473606800589202217262159296946 8945693609029888309769478500556577381091 2450652263732940553371048162780477892628 2907035728085761517195045752059410418761 6719577978495655395744305150721980218549 6851254244212512518485494590733542169032 7204548122409732559374786135831844439299 7293039217189424686673755609174407847880 2840769316923042153498355373534296184909 0134563925176170167412524401380614773926 0605482970951746024061730867868708684610 6577229892837316731345030481729097804850 8900441955408970268137904266113064597079 2045455096864365885058073628748792496034 3680395890499601958035533392335149630962 7662539521829916274723081108933725436467 0498793261599218214559940171214785616914 5860479934932696704129306435332068242404 1416416258745129532853921695529171946055 1133416030194641961946747518483062705031 7074028543721710176160604562190250082878 1937951780475376643777255739380921363828 6768361580175921878116332734622156554064 1710807998257748227806856302370662314764 5209893768983405139511216973980680754001 0789769294478878582393626208046987060726 9386987562487709959476306744865377104316 4297478291241462033272231040806139882929 0492326028361116358150654704601560026418 3705909590433296292949278801484706570215 9006988917810823339294330127361125154093 4861254020347234278747511272412624674810 8474818063938888627912643400676109379646 5122158289166014938377783068519894225503 9004429068962561723796948033570601733014 5557107705903750382377116856780129449103 3930253839795241045846741002045831687138 6236998537835246354848515925676721669677 2604843578755268107474620233503068634244 4199684393115879833785796127896952349384 4260447885887267294185375745993148064311 5151259873861682145764237227083956912976 9733285840500926125541510835138075328650 1719755943781499855040013764070481599809 7834008770669847129959734696600105052988 6250858239787526703365125399255028418159 1424741466024730883826348398658578241231 0434131660101941252905054974634316201210 0435977290663269383756332317496854634804 9094940799429440813559020662680865550330 6236665183634717010236751584054994381951 9650166500542753230375496005016844377522 7881727453839038787387053737711875532359 3991261346515408017803907967614944222347 8495006403818440352380944933240414052397 0809926651805816093020942783048095072940 1061230573771898959660820593286441367075 7234524554707600229991484236311949415496 6680377679196026213762555157616146533145 8294777552352757160359180527931648886302 0956222905442165786872626616090139040537 3693671256657550617937761380973679753453 8922062923945307521646788926182613723660 8355154831812736744352568082606315302045 9301881717024474513968967166735088974005 7646362498360930704298839296870428615781 9457610241463950803154940861098548745264 4393197888868691655251814007503994641409 2364941992169632655651441396242788074347 6426616687379968885782982564225819570355 8135501970100897585463247419915722946256 4738005019633679540549254472452146375600 1882661871197481487710441885241582998920 4817485489175060391627801212867671430006 0476990717475721599729417423966638341363 5397122667252692532240070348933454659077 5581412235118929531144679484454403308559 9854918333184269945556823190893064874837 3300721594456048887542258262389855769061 6542485089641883134692179822768827936720 3421787458720259940307097603190917131436 9175935909053430743151626535277624784700 1619932276231437869453534971363182573261 5607953128595984957392081693384591392669 3817566817003183110084980435688708115986 7695768646545618939901989037634364734365 5157860702780005438511948259561409440319 5347622067742771479786753033396621425540 1744001736390204377512691183232890509307 6173799172613416056469770137796967644287 0330974725688760317535598059657745747154 950311888909904901066
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.05.2017, 01:21
Ты вот это читал?
Цитата Сообщение от nd2 Посмотреть сообщение
Предполагается, что в файле числа расположены через пробельные символы:
0
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 129
23.05.2017, 01:23  [ТС]
nd2, Простите меня, но как программе глотать всё подряд до конца файла?
Не злитесь, если Вы сейчас злитесь)
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.05.2017, 01:36
Цитата Сообщение от Валерий_ Посмотреть сообщение
Простите меня, но как программе глотать всё подряд до конца файла?
Это вопрос как относится к тому, как числа расположены в файле?
Есть условие в параметрах while, которое проверяется при каждой итерации (проверяется флаг ошибки в потоке). Когда будут считаны все данные из файле, в потоке установиться флаг ошибки, и будет выход из цикла while. Или о чём вопрос?
0
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 129
23.05.2017, 01:40  [ТС]
nd2, Думал об этом, но как я понимаю придётся делать сначала считывать букву , а не цифру. Как сразу из файла вкладывать именно цифры в вектор, а не букву-48.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.05.2017, 01:42
Цитата Сообщение от Валерий_ Посмотреть сообщение
как программе глотать всё подряд до конца файла?
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    vector<int>vec;
    ifstream fin("text.txt"); 
    if (fin)
    {
        int n;
        while (fin >> n)
             vec.push_back(n);
 
         fin.close();
         for (int i = 0; i < vec.size(); ++i)
                   cout << vec[i] << ' ';
     }
     else
           cout << "Error opening file!" << endl;
Вот содержимое файла:
11 23 45 34 56 345 0 78
На скрине - работа.
Миниатюры
Считывание целых чисел из файла в вектор  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.05.2017, 01:43
Цитата Сообщение от Валерий_ Посмотреть сообщение
Думал об этом,
О чём? Зачем числа без пробелов в файл записываешь?
Цитата Сообщение от Валерий_ Посмотреть сообщение
C++
1
2
3
4
            for (size_t i = 0; i < v.size(); ++i)
            {
                potok << v[i];
            }
И как потом собираешься разбираться: где одно число закончилось и началось следующее? Об этом думал?
0
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 129
23.05.2017, 01:51  [ТС]
nd2, Как я понимаю нужны пробелы? Просто получается, что оно забирает почисленно. То есть 3-9 значное оно n поместит, но у меня пробелов нет, и всё в n не поместиться , то есть надо по цифрам обрабатывать.
(fin>>n )=> записать всё до пробела в n .

Добавлено через 1 минуту
Это 1 число, просто в нём много цифр и поэтому его придётся считывать по цифрам.

Добавлено через 44 секунды
Весь будущий вектор - это 1 число.

До конца проги оно должно храниться задом наперёд - как и есть.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.05.2017, 01:53
Цитата Сообщение от Валерий_ Посмотреть сообщение
Это 1 число, просто в нём много цифр и поэтому его придётся считывать по цифрам.
С этого нужно было и начинать. Максимальное число, которое может поместиться в int знаешь? Если нет, то узнай.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.05.2017, 01:53
Помогаю со студенческими работами здесь

Считывание из файла (fread) в вектор
typedef std::vector&lt;float&gt; TvFloat; TvFloat LineBuff; FILE* InFile = fopen(GRFPath.c_str(),&quot;rb&quot;); LineBuff.resize(CntParsInGRF); ...

Считывание чисел с консоли в вектор
Допустим, пользователь должен ввести несколько чисел через пробел в одну строку и при завершении нажать энтер, а мне нужно записать эти...

Считывание файла в вектор типа string
Дело в том, что в общем то не работает по какой-то причине функция eof(); и даёт true только 1 раз, может я что не так понял, но она должна...

Считывание из файла вектор(матрицу) MathCad
Поскажите, не могу понять, как сделать считывание файла в MathCad, вот задание Создать файл данных векторного типа с именем MY_FILE и...

Считывание с клавиатуры n целых чисел и вычисление количества положительных, отрицательных и нулевых чисел
ia znaiu, 4to legko, no u menia 4to-to ne to.... vot zadanie Напишите три программы (одну с использованием оператора For, другую с...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru