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

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

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

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

24.06.2010, 11:53. Просмотров 2190. Ответов 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 в последовательность чисел
Посмотрите здесь:

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

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

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

Преобразовать 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 в int .? - C++
строки 66 и 71 соответственно, считываю из файла в string, как преобразовать? кроме static_cast не знаю И по прежнему не понимаю как...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4820 / 3240 / 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.::.
143 / 143 / 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.::.
143 / 143 / 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.::.
143 / 143 / 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.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 18:05     Преобразовать string в последовательность чисел #9
Я немного не понял ваше задание.
Что значит вывести символьную строку набором цифр?
Если вам нужно просто вывести строку TMS_IR в таком виде как она есть, то её преобразовывать не надо, её можно просто вывести, используя стандартные функции вывода на консоль, т.е.
C++
1
cout << TMS_IR << endl;
accept
4820 / 3240 / 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
4820 / 3240 / 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.::.
143 / 143 / 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
97 / 93 / 4
Регистрация: 16.05.2010
Сообщений: 310
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
4820 / 3240 / 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 в TCHAR - C++
Подскажите пожалуйста в чем ошибка. Нужно преобразовать string -&gt; TCHAR взял из поста string to TCHAR выдает ошибку d:\program...

Преобразовать string в float - C++
Привет! Подскажите, пожалуйста, наиболее простой способ, как преобразовать значение типа string в float.

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

Преобразовать double в string - C++
Подскажите как преобразовать double в string ?? Нашел что то похожее при помощи ostringstream , но там не совсем то.. ...


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

Или воспользуйтесь поиском по форуму:
accept
4820 / 3240 / 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 в последовательность чисел
Ответ Создать тему
Опции темы

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