Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Fiorentina
0 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 5
1

Как считывать только числа из текстового файла?

12.10.2017, 18:18. Просмотров 228. Ответов 7
Метки нет (Все метки)

необходимо считать из текстового файла числа в массив. но если в файле будут еще и буквы, то функция не будет работать. как запретить чтение букв?
Например:
если в файле: 11 sadsa 3 asdasd 2 1 asda, то в массив передать: 11 3 2 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
int *inputf(ifstream &f,int &count,char s[40])
{
 f.open (s);
 if (!f)
    {
        cout << "File not found\n";
        system("pause");
    }
 int a;
 int i = 0;
 do
 {
    if (f >> a)
        {
            count++;
        }
        else
        {
            f.clear();
            f.ignore(1,' ');
        } 
 } while (!f.eof());
 
 f.clear(); 
 f.seekg(0); 
 int *arr = new int[count];
 for (int i = 0; i<count; i++)
 {
    
    f >> arr[i];    
 }
 f.close();
    return arr;
}
заранее спасибо
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2017, 18:18
Ответы с готовыми решениями:

Считывать из текстового файла и записывать в новый файл только строки, содержащие двузначные числа
Написать программу, которая считывает из текстового файла и записывает в новый файл только строки,...

Вывести на экран только числа из созданного Вами на диске текстового файла, содержащего буквы и числа
Требуется вывести на экран только числа из созданного Вами заранее на диске текстового файла,...

Как считывать scanf'ом только до конца строки
Люди, ссори за нубизм, но как сделать так,чтобы при считывании использовать только функцию scanf и...

Как организовать вывод двумерного массива (целые числа) из текстового файла?
Люди, объясните младшему товарищу. как организовать вывод двумерного массива(целые числа) из...

Как считывать только одно число типа double за один проход
Теперь измените тело цикла так, чтобы он считывал только одно число типа double за один проход....

7
nmcf
6526 / 5750 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
12.10.2017, 18:38 2
Слова считывай и пробуй преобразовывать в числа.
0
Fiorentina
0 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 5
12.10.2017, 18:55  [ТС] 3
как это сделать?
0
Manowar
Отава Ё.
1995 / 546 / 180
Регистрация: 12.03.2016
Сообщений: 2,051
Завершенные тесты: 1
12.10.2017, 19:20 4
http://ru.cppreference.com/w/cpp/string/basic_string/stol
0
nmcf
6526 / 5750 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
12.10.2017, 19:38 5
Цикл do работает? Используй его второй раз. Вместо 15-й строки сделай добавление в массив.
0
Fiorentina
0 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 5
12.10.2017, 23:03  [ТС] 6
nmcf, я же считаю в count длину массива
0
nmcf
6526 / 5750 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
13.10.2017, 00:10 7
Второй такой же цикл добавь. После подсчёта длины.
0
Геомеханик
798 / 602 / 939
Регистрация: 26.06.2015
Сообщений: 1,409
13.10.2017, 14:07 8
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
#include <iostream>
#include <sstream>
#include <fstream>
#include <iterator>
#define is_digit(c) ((c) >= '0' && (c) <= '9')
 
size_t get_array(int*& arr, std::istream& _in){
    int    d;
    size_t j, n = 0;
    std::istreambuf_iterator<char> i(_in), e;
    while(i != e){
        while((i != e) && !is_digit(*i))
            ++i;
 
        if(i != e)
            ++n;
 
        while((i != e) && is_digit(*i))
            ++i;
    }
 
    if(!n || ((arr = new (std::nothrow) int[n]) == NULL))
        return 0;
 
    _in.seekg(0, _in.beg);
    i = _in;
    j = 0;
    while(i != e){
        while((i != e) && !is_digit(*i))
            ++i;
        if(i == e)
            break;
 
        d = 0;
        while((i != e) && is_digit(*i)){
            d = d*10 + (*i - '0');
            ++i;
        }
        arr[j++] = d;
    }
    return n;
}
 
int main(void){
    int*   arr = NULL;
    size_t cnt;
 
    //для примера ввод из строки
    char s[] = "11 sadsa 3 asdasd 2 1 asda 2012";
    std::istringstream sp(s);
    cnt = get_array(arr, sp);
 
/*  ввод из файла
    std::ifstream fp("file.txt");
    cnt = get_array(arr, fp);
    fp.close();
*/
    for(size_t i = 0; i < cnt; ++i)
        std::cout << arr[i] << ' ';
 
    //...
 
    if(arr != NULL)
        delete[] arr;
    std::cin.get();
    return 0;
}
0
13.10.2017, 14:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2017, 14:07

Как считывать каждые 2 символа из текстового файла?
Всем привет))) Ребят помогите пожалуйста!!! Кароч нужно написать прогу которая берет некий hex файл...

Как считывать из текстового файла, пропуская первую строку?
Имею такой код: procedure TF_knopka.fZagrClick(Sender: TObject); // Закрузка...

Как считывать строки из текстового файла и записывать их в файл?
До этого на java не программил, но щас потребовалось сделать это именно на этом языке. Желательно...


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

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

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