С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

24.06.2010, 11:53. Просмотров 2305. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2010, 11:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразовать string в последовательность чисел (C++):

Преобразовать последовательность из n вещественных чисел a1, ..., an. - C++
Ребят подкиньте идей. Дана последовательность из n вещественных чисел a1, ..., an. Преобразовать ее по следующему правилу: а)...

Преобразовать последовательность чисел так, чтобы сначала были нули, а потом все остальные. - C++
Тема лабораторной работы: Работа с одномерными массивами. Задание: Преобразовать последовательность чисел так, чтобы сначала были нули, а...

Как преобразовать char* в string и вывести переменную string на экран? - C++
for (int k = 0; k &lt; 10; k++) { int x = (int)rand() / RAND_MAX + rand() % 6 + 2; char *chars = new char; ...

Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами - C++
Здравствуйте, уже несколько дней мучаюсь над такой задачей : &quot;Имеется литерная последовательность, состоящая из не более чем 30 ...

Преобразовать латинский текст string в русский текст string - C++
Пишу приложение, которое мне будет отправлять в твиттер нужные сообщения. Встретился со следующей головоломкой (сразу хочу сказать, что...

Преобразовать string в TCHAR - C++
Подскажите пожалуйста в чем ошибка. Нужно преобразовать string -&gt; TCHAR взял из поста string to TCHAR выдает ошибку d:\program...

40
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
16.07.2010, 03:51 #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;
};
но это для начала будет тяжеловато
1
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
19.07.2010, 12:13  [ТС] #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
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
19.07.2010, 14:44 #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;
}
0
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
19.07.2010, 17:25  [ТС] #34
я имею ввиду. что первая строка считываясь посимвольно....если символ 0, то можно считывать один символ второй строки..если 1, то не считываем новое значение второй строки,а оставляем старое значение
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
19.07.2010, 17:36 #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;
}
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
20.07.2010, 04:12 #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]$
0
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
21.07.2010, 16:04  [ТС] #37
вот еще вопросик... у меня есть 3 массива типа int как мне создать структуру..и вообще..как создаются структуры и объявляются??
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
21.07.2010, 16:43 #38
Цитата Сообщение от Jlu Посмотреть сообщение
вот еще вопросик... у меня есть 3 массива типа int как мне создать структуру..и вообще..как создаются структуры и объявляются??
С помощью ключевого слова struct
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
21.07.2010, 19:04 #39
Что-то типа.

C++
1
2
3
4
5
6
struct Arr
{
   int*Arr;
   int*Arr2;
   int*Arr3;
};
0
easybudda
Модератор
Эксперт CЭксперт С++
9699 / 5649 / 964
Регистрация: 25.07.2009
Сообщений: 10,871
21.07.2010, 19:29 #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];
1
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
23.07.2010, 03:08 #41
Цитата Сообщение от Jlu
у меня есть 3 массива типа int как мне создать структуру
структура может объединять указатели (это когда массивы где-то хранятся, а структура только знает где они хранятся)
структура может объединять массивы (это когда массивы находятся прямо в структуре, её размер будет состоять из размеров этих массивов)

структура объявляется снаружи всех функций
C
1
2
3
struct {
    int n;
};
ей задаётся метка, чтобы отличать её от других структур
C
1
2
3
struct number {
    int n;
};
структура может содержать структуру
C
1
2
3
4
5
6
7
struct Point {
    int x, y;
};
 
struct Rectangle {
    struct Point leftup, rightdown;
};
это по памяти с K&R2 (книжка)


вот таким образом делаем массив
C
1
2
3
4
struct array {
    int arr[MAXINTARRAY];
    size_t nobj;
};
ниже создаём на основе этой структуры ещё структуру
C
1
2
3
4
struct arr_of_arr {
    struct array a[INTARRAYSMAX];
    size_t nobj;
};
тип описан, теперь его можно использовать во всех функциях

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define INTARRAYSMAX 5
 
...
 
    int n[MAXINTARRAY] = { 0, 1, 2, 3 };
 
...
 
    struct arr_of_arr obj;
    
 
    obj.nobj = 3;
    memcpy(obj.a[0].arr, n, sizeof n);
    memcpy(obj.a[1].arr, n, sizeof n);
    memcpy(obj.a[2].arr, n, sizeof n);
 
    obj.a[0].nobj = 4;
    obj.a[1].nobj = 2;
    obj.a[2].nobj = sizeof obj.a[2].arr / sizeof obj.a[2].arr[0];
 
    /* obj содержит три массива по 4, 2 и MAXINTARRAY элементов
       (там места занято больше, и можно ещё два массива сохранить в obj) */
1
23.07.2010, 03:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2010, 03:08
Привет! Вот еще темы с ответами:

Преобразовать int в string - C++
Как перевести переменную int в string?

Преобразовать string в wchar_t - C++
Подскажите как переобразовать string в wchar вот код wchar_t buffer; string s2 = &quot;10 20 30 40 50&quot;; swprintf(buffer, L&quot;%f\0&quot;,s2) ...

Преобразовать string^ в double - C++
Есть старая программа на c++, написанная в среде MS VS2010 с использование WinForm, и, как следствие .Net Появилась проблема с...

Преобразовать из float в string - C++
Скажите, пжл, какие существуют ф-ии для конвертации из float в string?


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

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

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