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

Считать строку в динамический массив - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
07.07.2010, 18:03     Считать строку в динамический массив #1
помогите считать строку цифр неизвестной длины и перевести в массив целых чисел , код на си обычном
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
07.07.2010, 18:07     Считать строку в динамический массив #2
Мутная какая-то формулировка.... Строка цифр, пусть даже неизвестной длины, - это всего-лишь одно число! Откуда же тут массиву взяться???

Уточни формулировку. Ну и, конечно же, чем конкретно помочь? Где твой код, какие ошибки, что не получается?
suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
07.07.2010, 18:19  [ТС]     Считать строку в динамический массив #3
у меня есть функция которая считывает из файла последовательность чисел , эти числа надо записать в массив , в каждой ячейке по одному числу, когда я считываю у меня определен размер 1000, а нужно чтобы размер выделялся автоматически
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int file_read(char Buf[1000]){
        int len;
        
        FILE *fp;
        fp=fopen("C:\\name.txt", "r"); 
        if (fp==0)
        {
                printf("файл не найден\n");
                exit(1);
        }
        fgets(Buf, 1000, fp);
        len = strlen(Buf);
 
        printf("данная последовательность:\n");
        for(i=0; i<len; i++){
             Buf[i] -= '0';
             printf("%c", Buf[i]);
                        }
        printf(" \n");
        return Buf[i],i;
        fclose(fp);}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.07.2010, 18:59     Считать строку в динамический массив #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
        int len=0;
        int num=0;
        char*Buf;
                
        FILE *fp;
        fp=fopen("D:\\name.txt", "r"); 
        if (fp==0)
        {
            printf("файл не найден\n");
            exit(1);
        }
        while(!feof(fp))
        {
            fgetc(fp);
            num++;
        }
        fclose(fp);
        fp=fopen("D:\\name.txt", "r"); 
        if (fp==0)
        {
            printf("файл не найден\n");
            exit(1);
        }
        Buf=new char[num];
        while(!feof(fp))
                fgets(Buf, num, fp);
                len = strlen(Buf);
 
                printf("Posled:\n");
                for(int i=0; i<len; i++){
                         Buf[i] -= '0';
                         printf("%d", Buf[i]);
                                                }
                printf(" \n");
                  fclose(fp);
                return 0;
}
suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
07.07.2010, 19:38  [ТС]     Считать строку в динамический массив #5
а зачем два раза открывать файл??
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.07.2010, 19:49     Считать строку в динамический массив #6
suv121, Чтобы на начало файла поставить снова. Как это делается без закрытия/открытия не помню
suv121
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 134
08.07.2010, 11:12  [ТС]     Считать строку в динамический массив #7
а как сделать чтобы в функцию file_read поступал динамический массив , а то у меня в меэйне статический
и как в ранс двухмерный массив задать динамически
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
void runs(int *B,int v){    
    int j,k=0,i;
    int m[2][20];
    
    i=0;
    while(i<=v-1){
        j=i;
        while(B[j]==B[i]){        
            j++;
            k++;}
            if(B[i]==0){m[0][k]++;}
            else{m[1][k]++;}
            k=0;
            i=j;}
    
 
 
for(i=0;i<2;i++){
    
    printf("\n последовательности из %d  :\n", i );
    for(j=1;j<11;j++)
        printf("по %d %d\n", j,m[i][j]);
}
    }
 
 
/*функция считывания из файла последовательности*/
int file_read(char *Buf){
        int len,num=0;
        
        FILE *fp;
        fp=fopen("D:\\name.txt", "r"); 
        if (fp==0)
        {
            printf("файл не найден\n");
            exit(1);
        }
                while(!feof(fp))
                {
                        fgetc(fp);
                        num++;
                }
                fclose(fp);
                fp=fopen("D:\\name.txt", "r"); 
        if (fp==0)
        {
            printf("файл не найден\n");
            exit(1);
        }
                Buf=new char[num];
                while(!feof(fp))
                fgets(Buf, num, fp);
                len = strlen(Buf);
 
                printf("Posled:\n");
                for(int i=0; i<len; i++){
                         Buf[i]-= '0';
                         printf("%d", Buf[i]);
                                                }
                printf(" \n");
        return Buf[i];
        fclose(fp);}
 
int main()
{
    setlocale(LC_CTYPE,"RUS");
        char A[1000];
        int i,k,n=0,m,v,B[160];
        file_read(A);
        printf("\n двоичное представление:\n");
        
        for(m=0;m<1000;m++){
            if(A[m]==NULL)
                break;
        else 
            for(i=3;i>=0;--i){
                    printf("%d", B[n]=(A[m]>>i)&1);
                    n++;
                    v=n;}}
        printf("\nразмер=%d",v);
 
 
        printf("\n");
        printf("\n выберете вариант анализа:\n 1.frequency test\n 2.runs test\n 3.выход\n\n");
        int q;
M1:scanf("%d", &q);
if(q==1){
    frequency(B,v);
printf(" для выхода нажмите три или ");}
if(q==2){
    runs(B,v);
printf(" для выхода нажмите три или ");}
if(q==3){
    return 0;}
else{printf("введите другое число\n");
goto M1;}
}
Chevit
3 / 3 / 0
Регистрация: 06.07.2010
Сообщений: 18
08.07.2010, 16:30     Считать строку в динамический массив #8
Цитата Сообщение от Lavroff Посмотреть сообщение
suv121, Чтобы на начало файла поставить снова. Как это делается без закрытия/открытия не помню
int fseek ( FILE *stream, int offset [, int whence] ), где:
stream - указатель на открытый файл;
offset - смещение, измеряемое в байтах от начала файла;
whence - точка, от которой производится смещение:
SEEK_SET (0) - начало файла ;
SEEK_CUR (1) - позиция текущего указателя файла ;
SEEK_END (2) - конец файла (EOF) ;
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.07.2010, 16:41     Считать строку в динамический массив #9
"... Или, если хочешь, скажу проще..." (с)
#include <stdio.h>
void rewind(FILE *stream);

Функция rewind() перемещает указатель текущей позиции файла в начало заданного потока. Она также очищает связанные с потоком stream признаки конца файла и ошибок.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2010, 16:51     Считать строку в динамический массив
Еще ссылки по теме:

C++ Не могу считать матрицу из файла в динамический массив
C++ Считать матрицу в динамический массив
Добавить новую строку в двумерный динамический массив C++

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

Или воспользуйтесь поиском по форуму:
Chevit
3 / 3 / 0
Регистрация: 06.07.2010
Сообщений: 18
08.07.2010, 16:51     Считать строку в динамический массив #10
Цитата Сообщение от suv121 Посмотреть сообщение
а как сделать чтобы в функцию file_read поступал динамический массив , а то у меня в меэйне статический
и как в ранс двухмерный массив задать динамически
Если в мэйне ты создал статический массив, то передать его как динамический ты не сможешь, единственный вариант - перед передачей массива в функцию, создать динамический массив и передавать уже его...

Объявление двумерного динамического массива:
C++
1
2
3
4
5
int**x=new int*[2];
for(int i=0;i<2;i++)
{
x[i]=new int[20];
}
вроде бы так...
Yandex
Объявления
08.07.2010, 16:51     Считать строку в динамический массив
Ответ Создать тему
Опции темы

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