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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
24.06.2010, 11:53     Преобразовать string в последовательность чисел #1
Помогите, пожалуйста, понять свои ошибки.. не могу правильно написать аргументы функций... и вообще наверное проблема в самих функциях... задача такая: у меня есть стринг(набор 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++ преобразовать double в string
Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами C++
Преобразовать последовательность чисел так, чтобы сначала были нули, а потом все остальные. C++
C++ Преобразовать последовательность из n вещественных чисел a1, ..., an.
C++ Преобразовать string в int .?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.06.2010, 12:50     Преобразовать string в последовательность чисел #2
программу с функциями можно сделать без функций
функция main() может содержать всю программу
переменные лучше объявлять в функции main()
и объявлять лучше вверху, чтобы всегда легко узнавать, какие переменные уже есть, а какие ещё можно создать

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

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

Добавлено через 1 минуту
C
1
char TMS_IR[] = "1111101100000000";
вот это у тебя правильно, но записать его надо в main() и имя маленькими буквами
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 13:01     Преобразовать string в последовательность чисел #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;
}
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
24.06.2010, 14:17  [ТС]     Преобразовать string в последовательность чисел #4
Спасибо огромное... хоть какая -то ясность наступила..

Добавлено через 27 минут
TMS и TDI на экран не выводятся... в чем может быть проблема?
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 16:31     Преобразовать string в последовательность чисел #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 эти значения, тогда в функции вывод на консоль можно убрать.
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
24.06.2010, 17:20  [ТС]     Преобразовать string в последовательность чисел #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;
}
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 17:30     Преобразовать string в последовательность чисел #7
Это ошибки в ваших функциях. Они возвращают нулевые значения.
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
24.06.2010, 17:44  [ТС]     Преобразовать string в последовательность чисел #8
а как тогда вывести символьную строку набором цифр??
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 18:05     Преобразовать string в последовательность чисел #9
Я немного не понял ваше задание.
Что значит вывести символьную строку набором цифр?
Если вам нужно просто вывести строку TMS_IR в таком виде как она есть, то её преобразовывать не надо, её можно просто вывести, используя стандартные функции вывода на консоль, т.е.
C++
1
cout << TMS_IR << endl;
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.06.2010, 03:58     Преобразовать string в последовательность чисел #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 */
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
25.06.2010, 12:12  [ТС]     Преобразовать string в последовательность чисел #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 минут
получилось, спасибо огромное за совет
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
26.06.2010, 05:46     Преобразовать string в последовательность чисел #12
не, arr должен быть int, так как в нём предполагается хранить числа
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
26.06.2010, 12:54  [ТС]     Преобразовать string в последовательность чисел #13
скажите пожалуйста.. а как происходит вызов функций??мне нужно,чтобы функции выполнялись параллельно почти..как это сделать?????
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
26.06.2010, 14:40     Преобразовать string в последовательность чисел #14
Чтобы функции выполнялись параллельно, для этого нужно создавать отдельные потоки.
Цитата Сообщение от Jlu Посмотреть сообщение
скажите пожалуйста.. а как происходит вызов функций??
Вас сам механизм интересует?
Если интересует просто вызов, то вы это уже применяли, когда в функции main писали

Цитата Сообщение от Jlu Посмотреть сообщение
Instr(int i, int k, char IDCode[]);
Это и есть вызов функции.
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
26.06.2010, 15:02  [ТС]     Преобразовать string в последовательность чисел #15
а можно чуточку по-подробнее о создании отдельных потоков?
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
26.06.2010, 15:28     Преобразовать string в последовательность чисел #16
Цитата Сообщение от Jlu Посмотреть сообщение
а можно чуточку по-подробнее о создании отдельных потоков?
это можно сделать при помощи параллельного программирования, а именно средств OpenMP, MPI. Если интересно почитайте здесь http://www.cyberforum.ru/cpp-linux/thread138338.html
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
26.06.2010, 15:40  [ТС]     Преобразовать string в последовательность чисел #17
спасибо, постараюсь разобраться
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.06.2010, 08:31     Преобразовать string в последовательность чисел #18
C
1
printf("Nevernaja komanda  ");
функция printf(), происходит вызов этой функции, в функцию передаётся один аргумент
так как строки целиком не передаются, то функция получает в качестве аргумента просто адрес первого символа строки "Nevernaja komanda ", конец строки функция определит по нуль-символу в конце строки, все строки, даже "", содержат нуль-символ '\0'
строковые литералы располагаются в неменяемой области памяти, то есть их можно читать, но нельзя редактировать

C
1
comand = strcmp(instruction,"idcode");
функция strcmp(), вызывается функция, в неё передаётся два аргумента, instruction - это символьный массив, значит он будет преобразован в адрес первого элемента массива, первого символа, "idcode" - тоже символьный массив и строковой литерал, имени у него нет, но при передаче он будет преобразован в адрес первого символа
функция возвращает значение типа int, которое сразу присваивается переменной command

printf() тоже возвращает значение типа int, количество выведенных символов, его можно проверять, она может вернуть отрицательное значение при ошибке вывода
Jlu
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 30
30.06.2010, 11:29  [ТС]     Преобразовать string в последовательность чисел #19
подскажите еще ,пожалуйста, у мя есть 3 массива одномерных, как мне из них сделать 1 многомерный?????
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2010, 02:31     Преобразовать string в последовательность чисел
Еще ссылки по теме:

Преобразовать string^ в double C++
Преобразовать string в TCHAR C++
C++ Преобразовать string в complex

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

Или воспользуйтесь поиском по форуму:
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.07.2010, 02:31     Преобразовать string в последовательность чисел #20
надо сделать многомерный массив и скопировать в него одномерные массивы
копировать можно через циклы (более точное копирование, более гибкое)
копировать можно через memcpy() (это копирование блоками, подключить <string.h> - для C или <cstring> - для C++ )
Yandex
Объявления
01.07.2010, 02:31     Преобразовать string в последовательность чисел
Ответ Создать тему
Опции темы

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