0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 13
1

Как из строки прочитать числа и записать их в массив

18.09.2020, 10:42. Показов 5461. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! У меня есть задача, для решения которой необходимо поработать отдельно с каждой строкой файла, содержащего только целые числа. Я знаю, что построчное чтение файла осуществляется при помощи цикла while и функции fgets. Допустим я прочитал первую строчку. Но как быть дальше? Как именно из этой строчки (а не из всего файла) прочитать числа и записать их в массив, который, как я полагаю, должен быть динамическим (чтобы после обработки чисел одной строки, его очистить и использовать для считывания чисел с другой строки)?

P. S. Мне это нужно для того, чтобы создать новый файл, состоящий из тех строк исходного файла, из
чисел которых можно составить арифметическую прогрессию.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2020, 10:42
Ответы с готовыми решениями:

Как правильно прочитать целые числа из файла и записать их в массив
#include <iostream> #include <stdio.h> #include <cstdlib> using namespace std; void...

Как получить числа из строки записать в массив
Помогите пожалуйста!!! Есть строка String str = "p (26) 104 293 101 144 34 28 160 180"; Как...

Прочитать числа из строки в массив
Как можно выписать в отдельный числовой массив числа из строки? Именно числа, а не цифры. К...

Как прочитать строку из едита и записать ее в массив char
Как прочитать строку из едита и записать ее в массив char?

4
Модератор
2637 / 1750 / 919
Регистрация: 16.10.2013
Сообщений: 5,065
Записей в блоге: 14
18.09.2020, 10:46 2
M1H4JL0, считанную строку можно сделать строковым потоком и из него уже читать содержащиеся там числа:
псевдокод:
C++
1
2
3
4
5
6
7
8
#include <sstream>
...
string s = "1 2 3 4 5";
int num;
stringstream ss(s);
while(ss >> num) {
    // работа с числом num
}
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 13
18.09.2020, 10:51  [ТС] 3
Ребят, извините, я не знаю как так получилось, что моя темя попала в категорию С++. Мне нужен алгоритм на языке Си!!!
0
Модератор
2637 / 1750 / 919
Регистрация: 16.10.2013
Сообщений: 5,065
Записей в блоге: 14
18.09.2020, 11:12 4
Лучший ответ Сообщение было отмечено M1H4JL0 как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> // isdigit()
 
int main() {
    char *str = "1 2 33 412 5";
    int num;
    int flg = 0;
    do {
        while(!isdigit(*str) && *str != '\0') str++;
        
        if ((num = atoi(str)) > 0) {
            printf("%d ", num);
        }
        
        while(isdigit(*str) && *str != '\0') str++;
    } while(*str != '\0');
    
    return 0;
}
2
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 13
18.09.2020, 15:58  [ТС] 5
long399, спасибо большое за помощь!

Добавлено через 1 час 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 1024
 
int main()
{
    FILE *f=fopen("T15.1.txt", "r");
    FILE *g=fopen("T15.2.txt", "w");
    
    int num, h;
    int c[BUFSIZE];
    char buf[BUFSIZE];
    
    while(fgets(buf, BUFSIZE, f))
    {
        int i=0;
        int k=0;
        char* str = buf; 
        do {
            while(!isdigit(*str) && *str != '\0') str++;
            if ((num = atoi(str)) > 0) 
            {
                c[i]=num; 
                i++;
                k++;
            }
            while(isdigit(*str) && *str != '\0') str++;
        } while(*str != '\0');
        
        for(i=0; i<k; i++)
        {
            for(h=0; h<k-1; h++)
            {
                if(c[h]>c[h+1])
                {
                    int tmp = c[h];
                    c[h]=c[h+1];
                    c[h+1]=tmp;
                }
            }
        }
        int flag = 0;
        int d = c[k-1] - c[k-2];
        for (i = 0; i < k-1; i++) 
        {
            if (c[i + 1] - c[i] == d) continue;
            else
            {
                flag = 1;
                break;
            }
            
        }
        
        if(flag == 0) fprintf(g, "%s", buf);
    }
    fclose(f);
    fclose(g);
    return 0;
}
0
18.09.2020, 15:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2020, 15:58
Помогаю со студенческими работами здесь

Как можно в .dat файл записать и прочитать массив
как можно в .dat файл записать и вытащить массив. массив: st=&quot;строка 1&quot;; st=&quot;строка 2&quot;;...

Как прочитать по-отдельности числа из строки?
недавно начал изучать python и столкнулся с такой проблемой: нужно считать данные например 3 1 2...

Как числа, которые после 1-ой строки в текстовом документе, записать в массив "a"?
Как числа, которые после 1-ой строки в текстовом документе, записать в массив &quot;a&quot;? input.txt: 3 3...

Выделить из строки числа и записать в массив
Доброго времени суток! Задача такова: есть строка неопределённого размера (&gt;10000 знаков), состоит...

Записать в массив numbers целые числа из строки
Здравствуйте, подскажите пожалуйста как исправить сей конфуз. Есть 2 функции (одна вызывается...

Достать все числа из строки и записать их в массив
Добрый вечер. Помогите пожалуйста. Мне нужно как-то из строки вытащить все числа и записать их в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru