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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
#1

Преобразовать string в последовательность чисел - C++

24.06.2010, 11:53. Просмотров 2175. Ответов 40
Метки нет (Все метки)

Помогите, пожалуйста, понять свои ошибки.. не могу правильно написать аргументы функций... и вообще наверное проблема в самих функциях... задача такая: у меня есть стринг(набор 1 и 0)= TMS_IR.. мне нужно преобразовать его в последовательность чисел..типа двоичный код..и на определенном этапе "включить" следующий сигнал - заданный символьной строкой... и затем вывести это все на экран... причем запуск программы должен быть только после ввода команды "idcode" ..
буду очень благодарна за комментарии в программе...
и еще... где правильнее поставить определение переменных и почему?
теории начиталась.. а практики 0..


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
char  comand,
      instruction[7],
      TMS_IR[]="1111101100000000",  
      IDCode[]= "01001";
int  i=0,
     n=0,    
     k=0,
     TMS,
     TDI,
       c;   
 
int  TMSf(char TMS_IR[]);
int  Instr();
                        
int TMSf(char ,int )
 
{
 
//int  c=0;
    
          for (i=0; i< 17;i++)
           {if (TMS_IR[i] == '1')
              TMS = 1;
            if (TMS_IR[i] == '0')
             TMS = 0;
           else TMS = 0;
            }
           printf("%i ", TMS);
           return TMS;
}                                  
 
 
 
 
int Instr(void)
{  
 
 
    for (i=11; i<17;i++)
             for (k=0; k< 6;k++)                     
             if (IDCode[k] == '1')
                 TDI = 1;
             else TDI = 0;
                     
             
             return TDI;
}
 
 
 
                                    
 
int main()
{
 
cout <<"vvedite instruction  " ;
cin >> instruction;                                     
 
comand = strcmp(instruction,"idcode");
//printf("%s  ",comand);
                       
 if (comand == 0)               
 
  {  TMSf(int i, char TMS_IR);
   Instr(int i, int k, char IDCode[]);
  
 }
 
 
//  {while (!TDI)}
else printf("Nevernaja komanda  "); 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2010, 11:53     Преобразовать string в последовательность чисел
Посмотрите здесь:

Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами C++
Преобразовать последовательность чисел так, чтобы сначала были нули, а потом все остальные. C++
C++ Преобразовать последовательность из n вещественных чисел a1, ..., an.
Преобразовать string в float C++
C++ Преобразовать int в string
C++ Преобразовать string в int .?
Преобразовать string^ в double C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
01.07.2010, 10:30  [ТС]     Преобразовать string в последовательность чисел #21
вот так можно сделать??

C++
1
2
3
4
5
6
 for (j=0;j<60;j++)
        mascom[1][j]= arrtck[i];
        mascom[2][j]= arr[i];
        mascom[3][j]= arrtdi[i];
 
  cout << mascom[i][j] << "\t" << endl;
только хотелось бы,чтобы выводилось 3 строками.а выводится одним столбцом.. как это исправить?
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.07.2010, 10:54     Преобразовать string в последовательность чисел #22
C++
1
2
3
4
5
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 60; j++)
            cout << (j > 0  ? " " : "") << mascom[i][j];
        cout << endl;
    }
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
01.07.2010, 11:42  [ТС]     Преобразовать string в последовательность чисел #23
все выводится в один столбец и в конце файла какие-то отрицательные числа..как от них избавиться и вывести это все 3мя строками?

Добавлено через 22 минуты
не могу разобраться как передать массивы в массив... вот весь вариант проги.. может в функциях что-то нет так.. раз они еще столбцами выводят, вместо строк

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
int TCKf(char tcki[], int tck)
{       
        int arrsizetck,arrtck[100];
        int i,c;
 
        for (i = 0; (c = tcki[i]) != '\0'; i++)
             //   for (k=0; k< 6;k++)
                       
        {
        /* printf("%c" "\n", c); */
        arrtck[i] = (c == '0') ? 0 : 1;
       // printf("%d" "\t", arr[i]);
        cout << arrtck[i] << "\t" << endl;
        }
 
    arrsizetck = i;
        return tck;
}
 
 
 
                                                         
int Instr(char idcode[], int TDI)
{       
        int arrsizeId,arrtdi[100];
        int i,c;
 
        for (i = 0; (c = idcode[i]) != '\0'; i++)
             //   for (k=0; k< 6;k++)
                       
        {
        /* printf("%c" "\n", c); */
        arrtdi[i] = (c == '0') ? 0 : 1;
       // printf("%d" "\t", arr[i]);
        cout << arrtdi[i] << "\t" << endl;
        }
 
    arrsizeId = i;
        return TDI;
}
 
                                                        
int TMSir(char tms_ir[], int TMS) 
{       
        
        int arrsize,arr[100];
        int i,c;
        for (i = 0; (c = tms_ir[i]) != '\0'; i++)
        {
        /* printf("%c" "\n", c); */
        arr[i] = (c == '0') ? 0 : 1;
       // printf("%d" "\t", arr[i]);
        cout << arr[i] << " " << endl;
        }
 
    arrsize = i;
 
       // 
        return TMS;
}
                                                       
 
int main()
{
        char  comand, instruction[7];
        //char TMS_IR[]="1111101100000000";
       // char idcode[]= "01001";
        int  i, n, k, TMS, TDI,TMSi,tck,TCK, c, mascom[3][55],j;  //TMSid,
        i = j = n = k = TMS = TDI = TMSi = TCK = 0;//=TMSid
        char tms_ir[] = "11111011000000011000000000000000000000000000000000111110100",
               tcki[] = "01010101010101010101010101010101010101010101010101010101010";
        char idcode[] = "00000000000100100000000000000000000000000000000000000000000";
        int arrtck[100],arr[100],arrtdi[100] ;
        
 
 
        cout <<"vvedite instruction  ";
        cin >> instruction;
        comand = strcmp(instruction,"idcode");
        if (comand == 0)
        {
            TMS = TMSir(tms_ir, TMS);
                         TDI = Instr(idcode, TDI);
             TCK = TCKf(tcki, tck);
          
                mascom[1][j]= arrtck[i];
                        mascom[2][j]= arr[i];
                    mascom[3][j]= arrtdi[i];
 
        for (i = 0; i < 3; i++) {
                       for (j = 0; j < 60; j++)
                      cout << (j > 0  ? " " : "") << mascom[i][j];
                      cout << endl;}
 
             
        }
 
        else 
                cout << "Nevernaja komanda\n"; 
        return 0;
}
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
02.07.2010, 03:26     Преобразовать string в последовательность чисел #24
C++
1
2
3
4
5
    for (j = 0; j < 60; j++) {
        mascom[1][j]= arrtck[i];
        mascom[2][j]= arr[i];
        mascom[3][j]= arrtdi[i];
    }
в редакторе должна быть опция "пробелы вместо табуляции"
табуляцию нужно переделать в четыре пробела (чтобы хорошо видно было, где какой блок, и чтобы при глубокой вложенности не было переносов кода)

отрицательные числа - это так называемый "мусор", случайные данные
так как массивы созданы, но в них ничего не записано ни разу, там находится мусор

пример преобразования
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXINTARRAY  100
 
int TranslateBin(int [], const char *, int);
int PrintArr(const int *, int);
 
/* двоичное число в строковом виде
   переводит в целочисленный массив
   выводит содержимое массива
   после преобразования  */
int main(void) /* ANSI C89 */
{
    char number[] = "0101110101110001110";
    int arr[MAXINTARRAY];
    
    
    TranslateBin(arr, number, 7);
    
    PrintArr(arr, 7);
    
    
    TranslateBin(arr, number, strlen(number));
    
    PrintArr(arr, strlen(number));
    
    
    return EXIT_SUCCESS;
}
 
int TranslateBin(int n[], const char *s, int maxsize)
{
    int c, i;
 
    for (i = 0; (c = s[i]) != '\0' && i < maxsize; i++)
        n[i] = (c == '1') ? 1 : 0;
 
    return 0;
}
 
int PrintArr(const int *n, int size)
{
    while (size-- > 0)
        printf(" %d", *n++);
        
    putchar('\n');    
    
    return 0;
}
Код
[guest@station src]$ ./test
 0 1 0 1 1 1 0
 0 1 0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 0
[guest@station src]$
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
06.07.2010, 15:00  [ТС]     Преобразовать string в последовательность чисел #25
а можно пример немного прокомментировать.. а то что-то ваще разобраться не могу...
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.07.2010, 02:50     Преобразовать string в последовательность чисел #26
TranslateBin() - преобразует символьный массив из нулей и едениц в целочисленный массив из нулей и едениц, она копирует

C
1
2
    char number[] = "0101110101110001110";
    int arr[MAXINTARRAY];
делаем символьный массив из нулей и едениц
заготавливаем целочисленный массив, ничем не заполненный (garbage)

C
1
TranslateBin(arr, number, 7);
в массив arr из массива number копируем семь цифр (0101110)

C
1
TranslateBin(arr, number, strlen(number));
в массив arr из массива number копируем все цифры (0101110101110001110)

0101110101110001110 - это все цифры
хотим, например, скопировать не сначала и не до конца
вот 01011 1010111 0001110, второй кусок
делаем такой вызов

C
1
TranslateBin(arr, number+5, 7);
после этого в arr первые семь элементов будут равны 1 0 1 0 1 1 1

то есть мы преобразовали символы '0', '1' в цифры 0, 1
сами коды символов '0', '1', 'a', 'b' и так далее равны числам, которые совсем с ними не совпадают, какая таблица символов принята в системе, через ту они и будут вычисляться

Код
[guest@station ~]$ echo $'\x32'
2
[guest@station ~]$ echo $'\x31'
1
[guest@station ~]$ echo $'\x30'
0
[guest@station ~]$ echo $'\x40'
@
[guest@station ~]$
код нуля в ASCII равен 0x30 - это 48 в десятичной системе
поэтому, если сделать int n = '0'; , в n запишется не ноль, а 48

массив символов может содержать не только нули и еденицы, поэтому функцию TranslateBin() нужно дорабатывать, чтобы встретив не ноль и не еденицу, она возвращала -1
но это не горит
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
14.07.2010, 15:33  [ТС]     Преобразовать string в последовательность чисел #27
подскажите, пожалуйста, как строку преобразовать в набор цифр и из них выбрать только какой-то определенный интервал.. у меня получается какой-то бред..

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
int Instr(char idcode[], int TDI)
{       
    int arrsizeId,arrtdi[500],arrtdo[500], id[64];
        int i,c,k,j=0;
 
        for (i = 0; (c = idcode[i]) != '\0'; i++)
        {
            arrtdi[i] = (c == '0') ? 0 : 1;
               //arrtdo[0]= 0;
                printf("%d", arrtdi[i]);
        }
                printf("\n");
        printf("\n");
 
                      for (i = 0; (c = idcode[i]) != '\0'; i++)
              {
                  arrtdo[0]= 0;
                      arrtdo[i+1] = arrtdi[i];
                      printf("%d", arrtdo[i]);
                  }
                 printf("\n");
         printf("\n");
 
               for (k=0;k<64; k++)  
        {   for (i=(c = idcode[47]); i<(c = idcode[111]);i++);
                 
                id[k]=idcode[i];
                    printf("%d ", id[k]);
                     
                  }
        arrsizeId = i;
        return TDI;
}
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
14.07.2010, 18:23     Преобразовать string в последовательность чисел #28
Есть функция atoi. Она переводит строку в целое число, например:
C++
1
2
int a = atoi("123");
cout << a << endl;
Добавлено через 11 минут
Если каждый символ строки - отдельное число, то можно просто от кода символа отнимать 48, например так:
C++
1
2
3
4
5
6
7
8
9
const int n = 5;
int a [n];
int i;
char s [n] = {'1', '2', '3', '4', '5'};
for (i = 0; i < n; i++)
    a [i] = s [i] - 48;
for (i = 0; i < n; i++)
    cout << a [i] << " ";
cout << endl;
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.07.2010, 02:29     Преобразовать string в последовательность чисел #29
Цитата Сообщение от Jlu
как строку преобразовать в набор цифр и из них выбрать только какой-то определенный интервал
сначала надо преобразовать
а потом из преобразованного выбрать интервал

это две разные функции, одна здесь есть уже
C
1
int TranslateBin(int n[], const char *s, int maxsize)
а выбрать можно стандартной
копирование подмассива
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>
 
#define STARTELEM  3
#define ENDELEM    5
 
 
int PrintArr(const int *, int);
 
 
int main(void) /* ANSI C89 */
{
    int n[10] = {
        1, 2, 3, 4, 5, 6, 7, 8, 9, 0
    };
    int sub[3];
    
    
    memcpy(
        sub,
        n + STARTELEM - 1,
        (ENDELEM - STARTELEM + 1) * sizeof(int)
    );
    
    
    PrintArr(n, 10);
    
    PrintArr(sub, 3);
    
    return EXIT_SUCCESS;
}
 
int PrintArr(const int *n, int size)
{
    while (size-- > 0)
        printf(" %d", *n++);
        
    putchar('\n');    
    
    return 0;
}
Код
[guest@station src]$ ./test
 1 2 3 4 5 6 7 8 9 0
 3 4 5
[guest@station src]$
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
15.07.2010, 14:05  [ТС]     Преобразовать string в последовательность чисел #30
Accept, а можно тоже самое, только на моем примере??

Добавлено через 2 часа 55 минут
вроде разобралась, спасибо!
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.07.2010, 03:51     Преобразовать string в последовательность чисел #31
преобразование и копирование подмассивов

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
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXINTARRAY  100
 
#define SUB1START  1
#define SUB1END    6
 
#define SUB2START  7
#define SUB2END    9
 
#define SUB3START  10
#define SUB3END    13
 
#define SUB4START  14
#define SUB4END    19
 
int TranslateBin(int [], const char *, int);
int CopySubarr(int [], const int [],
               size_t, size_t);
int PrintArr(const int *, int);
 
 
/* переводит строковую запись двоичного числа
   в целочисленный массив
   копирует целочисленные подмассивы
   целочисленного массива */
int main(void) /* ANSI C89 */
{
    char number[] = "0101110101110001110";
    
    int arr[MAXINTARRAY];
    size_t arrnobj;
    
    int sub1[MAXINTARRAY],
        sub2[MAXINTARRAY],
        sub3[MAXINTARRAY],
        sub4[MAXINTARRAY];
    size_t sub1nobj,
           sub2nobj,
           sub3nobj,
           sub4nobj;
    
    
    /* 010111 010 1110 001110 */
    
    TranslateBin(arr, number, strlen(number));
    arrnobj = strlen(number);
    
    CopySubarr(sub1, arr, SUB1START, SUB1END);
    sub1nobj = SUB1END - SUB1START + 1;
    
    CopySubarr(sub2, arr, SUB2START, SUB2END);
    sub2nobj = SUB2END - SUB2START + 1;
    
    CopySubarr(sub3, arr, SUB3START, SUB3END);
    sub3nobj = SUB3END - SUB3START + 1;
    
    CopySubarr(sub4, arr, SUB4START, SUB4END);
    sub4nobj = SUB4END - SUB4START + 1;
    
    printf("%15s", "Array: ");
    PrintArr(arr, arrnobj);
    
    printf("%15s", "Subarray 1: ");
    PrintArr(sub1, sub1nobj);
    printf("%15s", "Subarray 2: ");
    PrintArr(sub2, sub2nobj);
    printf("%15s", "Subarray 3: ");
    PrintArr(sub3, sub3nobj);
    printf("%15s", "Subarray 4: ");
    PrintArr(sub4, sub4nobj);
    
    return EXIT_SUCCESS;
}
 
int TranslateBin(int n[], const char *s, int maxsize)
{
    int c, i;
 
    for (i = 0; (c = s[i]) != '\0' && i < maxsize; i++)
        n[i] = (c == '1') ? 1 : 0;
 
    return 0;
}
 
int PrintArr(const int *n, int size)
{
    while (size-- > 0)
        printf(" %d", *n++);
        
    putchar('\n');    
    
    return 0;
}
 
int CopySubarr(int to[], const int from[],
               size_t start, size_t end)
{
    if (start > end)
        return -1;
    
    from += start - 1;
    
    while (start++ <= end)
        *to++ = *from++;
    
    return 0;
}
Код
[guest@station src]$ ./test
        Array:  0 1 0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 0
   Subarray 1:  0 1 0 1 1 1
   Subarray 2:  0 1 0
   Subarray 3:  1 1 1 0
   Subarray 4:  0 0 1 1 1 0
[guest@station src]$


Добавлено через 3 минуты
там можно сделать
C
1
2
3
4
struct array {
    int arr[MAXINTARRAY];
    size_t nobj;
};
но это для начала будет тяжеловато
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
19.07.2010, 12:13  [ТС]     Преобразовать string в последовательность чисел #32
а если у меня есть 2 такие строки ..с набором 0 и 1.... и надо чтобы значения второй строки считывались(изменялись), только тогда, когда в первой строке 0..как это сделать??
например1: 010101010101010101010101010101
2 : 00000111000101

получить: 0101010101010101010101010101
2 :0 0 0 0 0 1 1 1 0 0 0 1 0 1
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
19.07.2010, 14:44     Преобразовать string в последовательность чисел #33
Цитата Сообщение от Jlu Посмотреть сообщение
только тогда, когда в первой строке 0
Когда в первой строке все нули?
Если да, то можно написать подпрограмму, например:

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
#include <iostream>
 
using namespace std;
 
bool check (char * str)
{
    char * p = str;
    while (*p != '\0')
    {
        if (*p == '1')
        {
            p = NULL;
            return false;
        }
        p++;
    }
    p = NULL;
    return true;
}
 
int main()
{
    char * str1 = "01010101";
    char * str2 = "00011100";
 
    if (check (str1))
    {
        // Что-то делаем со строкой 2
    }
    else
    {
        // Не делаем ничего
    }
 
    return 0;
}
Если только первый символ должен быть нулём, то можно так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    char * str1 = "01010101";
    char * str2 = "00011100";
 
    if (str1 [0] == '0')
    {
        // Что-то делаем со строкой 2
    }
    else
    {
        // Не делаем ничего
    }
 
    return 0;
}
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
19.07.2010, 17:25  [ТС]     Преобразовать string в последовательность чисел #34
я имею ввиду. что первая строка считываясь посимвольно....если символ 0, то можно считывать один символ второй строки..если 1, то не считываем новое значение второй строки,а оставляем старое значение
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
19.07.2010, 17:36     Преобразовать string в последовательность чисел #35
Так?

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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (LC_ALL, ".1251");
 
    const int n = 6;
           int i;
 
    char str1 [] = "101010";
    char str2 [] = "111000";
    char c;
 
    for (i = 0; i < n; i++)
    {
        if (str1 [i] == '0')
        {
            cout << "Введите новое значение второй строки\n";
            cin >> c;
            str2 [i] = c;
        }
    }
 
    cout << str2 << endl;
    return 0;
}
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.07.2010, 04:12     Преобразовать string в последовательность чисел #36
выборочное копирование

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXNUMBER    100
#define MAXINTARRAY  100
#define SELECTVALUE  0
 
int TranslateBin(int [], const char *, int);
int PrintArr(const int *, int);
int SelectByValue(int [], const int [],
                  size_t, const int);
 
/* переводит строковые записи двоичных чисел
   в целочисленные массивы;
   выборочно копирует отдельные числа
   из одного массива в другой по заданному значению */
int main(void) /* ANSI C89 */
{
    char num1[MAXNUMBER] = "010101010101010101";
    char num2[MAXNUMBER] = "000111011111110111";
    
    int arr1[MAXINTARRAY];
    size_t arr1size;
    
    int arr2[MAXINTARRAY];
    size_t arr2size;
    
    
    TranslateBin(arr1, num1, arr1size = strlen(num1));
    TranslateBin(arr2, num2, arr2size = strlen(num2));
    
    printf("Array 1: ");
    PrintArr(arr1, arr1size);
    printf("Array 2: ");
    PrintArr(arr2, arr2size);
    
    
    printf(
        "Array sizes are %s",
        (arr1size == arr2size ? "equal" : "different")
    );
    
    printf(
        ", %s" "\n",
        (arr1size == arr2size ? "continue..." : "stop.")
    );
    
    if (arr1size != arr2size)
        return EXIT_FAILURE;
        
    
    SelectByValue(arr2, arr1, arr1size, SELECTVALUE);
    
    printf("Array 1: ");
    PrintArr(arr1, arr1size);
    printf("Array 2: ");
    PrintArr(arr2, arr2size);
    
    
    return EXIT_SUCCESS;
}
 
int TranslateBin(int n[], const char *s, int maxsize)
{
    int c, i;
 
    for (i = 0; (c = s[i]) != '\0' && i < maxsize; i++)
        n[i] = (c == '1') ? 1 : 0;
 
    return 0;
}
 
int PrintArr(const int *n, int nobj)
{
    while (nobj-- > 0)
        printf(" %d", *n++);
        
    putchar('\n');    
    
    return 0;
}
 
int SelectByValue(int to[], const int from[],
                  size_t fromnobj, const int selvalue)
{
    int n;
    
    while (fromnobj-- > 0) {
        if ((n = *from) == selvalue)
            *to = n;
        from++;
        to++;
    }
    
    return 0;
}
Код
[guest@station src]$ ./test
Array 1:  0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Array 2:  0 0 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1
Array sizes are equal, continue...
Array 1:  0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Array 2:  0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
[guest@station src]$
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
21.07.2010, 16:04  [ТС]     Преобразовать string в последовательность чисел #37
вот еще вопросик... у меня есть 3 массива типа int как мне создать структуру..и вообще..как создаются структуры и объявляются??
Nameless One
Эксперт С++
5765 / 3414 / 255
Регистрация: 08.02.2010
Сообщений: 7,430
21.07.2010, 16:43     Преобразовать string в последовательность чисел #38
Цитата Сообщение от Jlu Посмотреть сообщение
вот еще вопросик... у меня есть 3 массива типа int как мне создать структуру..и вообще..как создаются структуры и объявляются??
С помощью ключевого слова struct
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
21.07.2010, 19:04     Преобразовать string в последовательность чисел #39
Что-то типа.

C++
1
2
3
4
5
6
struct Arr
{
   int*Arr;
   int*Arr2;
   int*Arr3;
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2010, 19:29     Преобразовать string в последовательность чисел
Еще ссылки по теме:

C++ Преобразовать string в wchar_t
Преобразовать string в TCHAR C++
C++ Преобразовать string в complex
C++ Преобразовать латинский текст string в русский текст string
C++ Преобразовать из float в string

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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
21.07.2010, 19:29     Преобразовать string в последовательность чисел #40
Цитата Сообщение от Lavroff Посмотреть сообщение
Что-то типа
C
1
2
3
4
struct arr3 {
   int * pArr[3];
   size_t sizes[3];
};
можно так сделать... а лучше
C
1
2
3
4
struct arr {
   int * pData;
   size_t nSize;
} arrays[3];
Yandex
Объявления
21.07.2010, 19:29     Преобразовать string в последовательность чисел
Ответ Создать тему
Опции темы

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