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

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

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

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

24.06.2010, 11:53. Просмотров 2295. Ответов 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
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.06.2010, 12:50 #2
программу с функциями можно сделать без функций
функция main() может содержать всю программу
переменные лучше объявлять в функции main()
и объявлять лучше вверху, чтобы всегда легко узнавать, какие переменные уже есть, а какие ещё можно создать

у функции бывает:
1. прототип (его ещё называют объявление, в C - объявление в новом стиле)
2. определение
3. вызов

они по-разному записываются и работают тоже по-разному

Добавлено через 1 минуту
C
1
char TMS_IR[] = "1111101100000000";
вот это у тебя правильно, но записать его надо в main() и имя маленькими буквами
2
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 13:01 #3
1)
Цитата Сообщение от Jlu Посмотреть сообщение
int TMSf(char TMS_IR[]);
Где реализация данной функции?

2)
Цитата Сообщение от Jlu Посмотреть сообщение
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;
}
Где имена переменных в списке параметров?

3) Если вы объявляете функцию, то определение лучше делать уже после main.
4) Глобальные переменные лучше не делать.
5) Где отступы?
6) Лучше не использовать cout и printf одновремнно.

Думаю, так правильно:

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
#include <iostream>
using namespace std;
 
int Instr(char IDCode[], int TDI)
{  
    int i, k;
    for (i=11; i<17;i++)
        for (k=0; k< 6;k++)
            if (IDCode[k] == '1')
                TDI = 1;
            else
                TDI = 0;
    return TDI;
}
 
int TMSf(char TMS_IR[], int TMS) 
{
    int i;
    for (i = 0; i < 17; i++)
    {
        if (TMS_IR[i] == '1')
            TMS = 1;
        if (TMS_IR[i] == '0')
            TMS = 0;
        else TMS = 0;
    }
    cout << TMS << endl;
    return TMS;
}
 
int main()
{
    char  comand, instruction[7];
    char TMS_IR[]="1111101100000000";
    char IDCode[]= "01001";
    int  i, n, k, TMS, TDI, c;
    i = n = k = TMS = TDI = 0;
 
    cout <<"vvedite instruction  " ;
    cin >> instruction;
    comand = strcmp(instruction,"idcode");
    if (comand == 0)
    {
        TMS = TMSf(TMS_IR, TMS);
        TDI = Instr(IDCode, TDI);
    }
    else 
        cout << "Nevernaja komanda\n"; 
    return 0;
}
2
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
24.06.2010, 14:17  [ТС] #4
Спасибо огромное... хоть какая -то ясность наступила..

Добавлено через 27 минут
TMS и TDI на экран не выводятся... в чем может быть проблема?
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 16:31 #5
Исправьте соответствующий код на этот:
C++
1
2
3
4
5
6
if (comand == 0)
        {
                TMS = TMSf(TMS_IR, TMS);
                TDI = Instr(IDCode, TDI);
                cout << TMS << " " << TDS << endl;
        }
Добавлено через 2 минуты
И TMS выводится в функции TMSf. Если вы будете выводить в main эти значения, тогда в функции вывод на консоль можно убрать.
1
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
24.06.2010, 17:20  [ТС] #6
выводит :
0 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
int Instr(char IDCode[], int TDI)
{  
        int i, k;
        for (i=11; i<17;i++)
                for (k=0; k< 6;k++)
                        if (IDCode[k] == '1')
                                TDI = 1;
                        else
                                TDI = 0;
        return TDI;
}
 
int TMSf(char TMS_IR[], int TMS) 
{
        int i;
        for (i = 0; i < 17; i++)
        {
                if (TMS_IR[i] == '1')
                        TMS = 1;
                if (TMS_IR[i] == '0')
                        TMS = 0;
                else TMS = 0;
        }
            return TMS;
}
 
int main()
{
        char  comand, instruction[7];
        char TMS_IR[]="1111101100000000";
        char IDCode[]= "01001";
        int  i, n, k, TMS, TDI, c;
        i = n = k = TMS = TDI = 0;
 
        cout <<"vvedite instruction  " ;
        cin >> instruction;
        comand = strcmp(instruction,"idcode");
        if (comand == 0)
        {
             TMS = TMSf(TMS_IR, TMS);
             TDI = Instr(IDCode, TDI);
             cout << TMS << " " << TDI << endl;
             
        }
 
        else 
                cout << "Nevernaja komanda\n"; 
        return 0;
}
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 17:30 #7
Это ошибки в ваших функциях. Они возвращают нулевые значения.
0
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
24.06.2010, 17:44  [ТС] #8
а как тогда вывести символьную строку набором цифр??
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 18:05 #9
Я немного не понял ваше задание.
Что значит вывести символьную строку набором цифр?
Если вам нужно просто вывести строку TMS_IR в таком виде как она есть, то её преобразовывать не надо, её можно просто вывести, используя стандартные функции вывода на консоль, т.е.
C++
1
cout << TMS_IR << endl;
1
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.06.2010, 03:58 #10
C
1
2
3
4
5
    char tms_ir[] = "1111101100000000";
    int c, i;
    
    for (i = 0; (c = tms_ir[i]) != '\0'; i++)
        printf("%c" "\n", c);
ещё дальше идём
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    char tms_ir[] = "1111101100000000";
    int arr[100], arrsize;
    int c, i;
    
    for (i = 0; (c = tms_ir[i]) != '\0'; i++) {
        /* printf("%c" "\n", c); */
        arr[i] = (c == '0') ? 0 : 1;
        printf("%d" "\n", arr[i]);
    }
 
    arrsize = i;
 
    /* теперь есть массив чисел arr,
       где каждый элемент - отдельная цифра из tms_ir,
       а количество цифр записано в arrsize */
1
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
25.06.2010, 12:12  [ТС] #11
а может вот так?? а то тот вариант, который Вы предлагаете, у меня не работает


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char tms_ir[] = "1111101100000000", arr[100] ;
    int c, i,arrsize;
    
    for (i = 0;i< (c = strlen(tms_ir)) ; i++) {
        /* printf("%c" "\n", c); */
        arr[i] = (tms_ir[i] == '0') ? 0 : 1;
        printf("%d" "\n", arr[i]);
    }
 
    arrsize = i;
 
    /* теперь есть массив чисел arr,
       где каждый элемент - отдельная цифра из tms_ir,
       а количество цифр записано в arrsize */
Добавлено через 26 минут
получилось, спасибо огромное за совет
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
26.06.2010, 05:46 #12
не, arr должен быть int, так как в нём предполагается хранить числа
1
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
26.06.2010, 12:54  [ТС] #13
скажите пожалуйста.. а как происходит вызов функций??мне нужно,чтобы функции выполнялись параллельно почти..как это сделать?????
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
26.06.2010, 14:40 #14
Чтобы функции выполнялись параллельно, для этого нужно создавать отдельные потоки.
Цитата Сообщение от Jlu Посмотреть сообщение
скажите пожалуйста.. а как происходит вызов функций??
Вас сам механизм интересует?
Если интересует просто вызов, то вы это уже применяли, когда в функции main писали

Цитата Сообщение от Jlu Посмотреть сообщение
Instr(int i, int k, char IDCode[]);
Это и есть вызов функции.
1
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
26.06.2010, 15:02  [ТС] #15
а можно чуточку по-подробнее о создании отдельных потоков?
0
26.06.2010, 15:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2010, 15:02
Привет! Вот еще темы с ответами:

Преобразовать 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?


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

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

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