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

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

Войти
Регистрация
Восстановить пароль
 
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
#1

Поиск бинарных чисел в строке символов и их преобразование - C++

06.12.2012, 04:15. Просмотров 383. Ответов 2
Метки нет (Все метки)

Добрый вечер. Нужна помощь в реализации программы.
Задача:
Кликните здесь для просмотра всего текста
Дана строка символов, в которой содержатся числа в двоичной системе записанные в формате <числа>,< числа>(1.1, 1010.01) - но это не обязательное условие. Нужно найти в строке эти числа, перевести в десятеричную систему и вывести сумму этих чисел. Строка заканчивается ";".

Если перед числом стоит "-" то при подсчете суммы число учитывается как отрицательное. На примере показано.

Примеры:
Кликните здесь для просмотра всего текста
Примерный вид строки: abc<=d@10be-11a1,1be;
Содержание: 10, -11, 1.1
Операции: 10-11+1.1 (все в двоичной системе) или 2-3+1.5(если не ошибаюсь)
На вывод: 0,5

Или так: fka>?oqja1001,01 jak@al-1,1sh;
На вывод: 7.75


Поиск по строке можно сделать как-то так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool havenumber(char z)
{
    return z>='0' && z<='9';
}
char findnumber()
{
char z;
do
    cin >> z;
    while (!havenumber(z));
    return z;
}

Или так с выводом уже:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
char str[20];
    char *pStr;
    short isNumber = 0;
 
    gets(str);
    pStr = str;
    while (*pStr) {
        if (*pStr >= '0' && *pStr <= '9') {
            isNumber = 1;
            printf("%c", *pStr);
        } 
        
        else {
            if (isNumber) {
                isNumber = 0;
                printf(" ");
            }
        }
        pStr++;
    }

Но как включить туда еще случай, когда перед числом стоит "-"? Вообщем вся проблема состоит в этом поиске чисел, включая случай когда перед числом стоит "-". Все остальное не вызывает никаких вопросов.

Буду признателен за вашу помощь. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2012, 04:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск бинарных чисел в строке символов и их преобразование (C++):

Поиск чисел в строке символов - C++
Прошу помочь с алгоритмом,т к сама не понимаю. Пыталась записать каждое число в отдельную строку,а потом призвоить float строке,но это...

Преобразование символов в строке - C++
Нужно изменить буквы в строке по следующему принципу: &quot;a&quot; на &quot;b&quot;, &quot;A&quot; на &quot;B&quot;, &quot;z&quot; на &quot;a&quot; и т.д. Но толкнулся с такой проблемой: программа...

Поиск предложения в тексте. Преобразование в массив символов. Не работает - C++
Задача: Программа должна считывать текст из файла и выводит на экран предложение, содержащее максимальное количество знаков пунктуации. ...

Поиск символов в строке - C++
задание такое: Дана строка произвольной длины. Группы символов, разделенные пробелами (одним или несколькими), будем называть словами....

Поиск символов в строке - C++
Доброго времени суток! Помогите пожалуйста-Нужно подсчитать в строке количество букв «в» Строку из нескольких слов мы должны ввести...

Поиск символов в строке - C++
Есть строка в файле txt, как организовать поиск наиболее часто повторяющегося символа в строке ?

2
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
10.12.2012, 03:25  [ТС] #2
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <cstdio> 
#include <cstdlib> 
 
using namespace std; 
 
enum STATE { 
   NN, 
   SIGN, 
   BNUM, 
   CCOMA, 
   ENUM 
}; 
 
enum CTYPE { 
   DIGIT, 
   MINUS, 
   COMA, 
   OTHER 
}; 
 
CTYPE getCTYPE(int character) { 
   switch (character) { 
      case '0': return DIGIT; 
      case '1': return DIGIT; 
      case '-': return MINUS; 
      case ',': return COMA; 
      default: return OTHER; 
   } 
} 
 
int main() { 
   // переменная для суммы бинарных чисер 
   double sum = 0.0; 
 
   // переменная для считывания чисел
   double num; 
   double tnum; 
 
   // определение, был ли знак минуса перед числом
   bool minus; 
   int c; 
 
   // состояние в котором находимся
   STATE state; 
   // начальное положение
   state = NN; 
    
   // строка заканчивается  ';'
   int end_character = ';'; 
   // все до первого ';'
   while ( (c = getchar()) != end_character) { 
    
      switch (state) { 
         case NN: 
            switch (getCTYPE(c))
     { 
               case MINUS: 
            minus = true; 
            num = 0.0; 
            state = SIGN; 
            break; 
               case DIGIT: 
            minus = false; 
            num = (c == '0' ? 0.0 : 1.0); 
            state = BNUM; 
            break; 
            }; break; 
 
    //----------------------------------------------------------     
    case SIGN: 
            switch (getCTYPE(c)) 
    { 
               case DIGIT: 
            state = BNUM; 
            num = num * 2 + (c == '0' ? 0.0 : 1.0); 
            break; 
               case OTHER: 
            state = NN; break; 
            }; break; 
         
    //----------------------------------------------------------
 
    case BNUM: 
            switch (getCTYPE(c)) { 
               case MINUS: 
            minus = true; 
            num = 0.0; 
            state = SIGN; 
            break; 
               case DIGIT: 
            num = num * 2 + (c == '0' ? 0.0 : 1.0); 
            break; 
               case COMA: tnum = 1.0 / 2.0; state = CCOMA; break; 
               case OTHER: state = NN; break; 
            }; break; 
 
   //-----------------------------------------------------------
 
         case CCOMA: 
            switch (getCTYPE(c)) { 
               case MINUS: 
            minus = true; 
            num = 0.0; 
            state = SIGN; 
            break; 
               case DIGIT: 
            num += (c == '0' ? 0.0 : tnum); 
            tnum /= 2; 
            state = ENUM; 
            break; 
               case COMA: 
            state = NN; 
            break; 
               case OTHER: 
            state = NN; 
            break; 
            }; break; 
 
  //------------------------------------------------------------
         case ENUM: 
            switch (getCTYPE(c)) { 
               case MINUS: 
            sum = minus ? sum - num : sum + num; 
            minus = true; 
            num = 0.0; 
            state = SIGN; 
            break; 
               case DIGIT: 
            num += tnum; 
            tnum /= 2; break; 
               case COMA: 
            sum = minus ? sum - num : sum + num; 
            state = NN; 
            break; 
               case OTHER: 
            sum = minus ? sum - num : sum + num; 
            state = NN;
            break; 
            }; break; 
      }; 
   } 
   if (state == ENUM) { 
      if (minus) 
         sum -= num; 
      else 
         sum += num; 
   } 
   printf("%lf\n", sum); 
   return 0; 
}
Нужна помощь в переписи данного кода в функции или в нечто другое. Буду весьма благодарен за помощь. Заранее спасибо.
0
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
12.12.2012, 16:38  [ТС] #3
Может кому-то понадобиться...
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
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
bool cyfra(char znak)
{
    if (znak=='1' || znak=='0')
    {
        return true;
    }
    else
        return false;
}
 
int wartosc(char znak)
{
    if (znak=='0')
    {
        return 0;
    }
    else
    {
        return 1;
    }
}
 
float jakaliczba(char &obecnyznak)
{
    char c;
    float wynik=0,dwa=2;  
    int wykladnik=-1;
    bool ujemna=false;
    if (obecnyznak=='-')
    {
        ujemna=true;
    }
    if (cyfra(obecnyznak))
    {
        wynik=wartosc(obecnyznak);
    }
 
    do
    {
        cin>>c;
        if (cyfra(c))
        {
            wynik=wynik*2+wartosc(c);
        }
 
    }
    while (cyfra(c));
    if (c==',')
    {
        do
        {
        cin>>c;
        if (cyfra(c))
        {
            wynik=wynik+wartosc(c)*exp(log(dwa)*wykladnik); 
            wykladnik=wykladnik-1;
        }
        }
        while (cyfra(c));
    }
 
    obecnyznak=c;
    if (ujemna)
        wynik=-wynik;
    return wynik;
}
int main()
{
    char ch;
    float suma=0;
    do
    {
        cin>> ch;
        if (ch=='1' || ch=='0' || ch=='-')
        {
            suma=suma+jakaliczba(ch);
        }
        
    }
    while (ch!=';');
    cout<<suma<<"\n";
    getch();
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2012, 16:38
Привет! Вот еще темы с ответами:

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

Поиск символов в строке - C++
написать прогу, которая запрашивает с клавиатуры строку, длиной 100 символов ,а потом находит в ней символы (. , !) и выводит на экран...

Поиск четных символов в строке - C++
вот мой код int main() { string a; getline(cin, a); for (int i = 0; i&lt;a.size();i++) if (a % 2 == 0) cout &lt;&lt; a; ...

Поиск палиндрома в строке символов - C++
Условие задачи: 1) Задан символьный массив F(N), N&lt;=260. Найти отрезок массива максимальной длины, в котором первый символ равен...


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

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

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