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

Простой парсер - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Арифметическое выражение http://www.cyberforum.ru/cpp-beginners/thread1219746.html
составить структурную схему алгоритма и проект программы вычисления функции, один параметр ввести с клавиатуры, а другой задать как константу, все вычисляемые значения вывести на экран.
C++ Решение систем алгебраических уравнений Всех приветствую и желаю доброго дня! Нуждаюсь в помощи по разработке алгоритма задания на языке С++ Необходимо написать программу для решения алгебраических уравнений и нахождения корней системы уравнения следующего вида: a11+a12+a13=b14 a21+a22+a23=b24 a31+a32+a33=a34 Вот такая система, надеюсь на вашу помощь:) спасибо за внимание ! http://www.cyberforum.ru/cpp-beginners/thread1219733.html
C++ Преобразование Int в char
от скуки баловался с кодом.решил проверить,можно ли сделать так? #include <iostream> int main(){ char b = 't'; int a =b; std::cout <<b; system("pause"); }
Найти все трехзначные числа, состоящие из разных цифр, сумма которых равна А C++
Найти все трехзначные числа, которые состоят из разных цифр, а их сумма ровна А (число А вводится с клавиатуры).
C++ Объяснить работу двух кодов http://www.cyberforum.ru/cpp-beginners/thread1219708.html
char a={"kakogo hrena?"}; cout<<a<<endl; // kakogo hrena? и int a={11,22,33}; cout<<a<<endl; // 001cfb50 Собсно почему в первом случае выводит весь символьный масив? Должен ЖЕ выводить тоже что и во втором случае - адрес а. Почему так? И почему сразу весь масив... попробывал через отдельный указатель. Кстати с этого примера все и началось увидел в книге и мозг повис. Что это? Что...
C++ Необходимо найти самое длинное слово и удалить все его вхождения самое длинное слово я нахожу, но вот как его удалить? #include "stdafx.h" #include <iostream> #include <cstring> using namespace std; int main(); int _tmain(int argc, _TCHAR* argv) подробнее

Показать сообщение отдельно
Tohitch
0 / 0 / 0
Регистрация: 17.06.2014
Сообщений: 10
30.06.2014, 09:52     Простой парсер
По идее, программа должна справа налево пробегать каждый символ введенной строки и переводить их в числа, если встречается "+" или "-" конвертированное число прибавляется или вычитается из искомого,процесс продолжается до тех пор пока не дойдет до начала строки.
Подскажите пожалуйста почему программа прерывается если встречает "+" или "-"?

Задача.Пользователь вводит с клавиатуры арифметическое выражение (используемые операции только сложение и вычитание). Посчитать его значение. Если в выражении встречаются другие символы, выдать сообщение, что выражение введено не корректно.
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
#include <iostream.h>
#include <math.h>
 
int conv(char);
bool cond_ar (char);
bool cond_dig (char);
 
 
void main()
{
    
 
    char str[100];
    cin>>str;
    
 
    int length=0;
    int value=0;
    int temp=0;
    int m=0;
 
    for ( int i=0;str[i]!='\0';i++)
    {
        if(cond_dig(str[i])==false && cond_ar(str[i])==false)
        {
            cout<<endl<<"wrong input";
            break;
        }
    }
 
 
 
 
 
    for ( int j=0; str[j]!='\0';j++)
    {
        if(str[j]!=NULL)
            length++;
        else
            break;
    }
    cout<<endl<<"string length="<<length;
    
    for ( int k=length-1;k>=0;k--) 
    {
        if (cond_dig(str[k]))
        {
            temp+=(conv(str[k])*pow(10,m));
            m++;
        }
        if ( cond_ar(str[k]))
        {
                if (str[k]=='+')
                {   
                    value+=temp;
                    temp=0;
                    m=0;
                }
                if (str[k]=='-')
                {
                    value-=temp;
                    temp=0;
                    m=0;
                } 
        }
        
        
        
        
    }
    
 
    cout<<endl<<value;
 
    
    cout<<endl;
}
 
bool cond_ar (char a)
{
    if(a=='+' || a=='-')
        return true;
    else
        return false;
}
 
bool cond_dig (char c)
{
    if(c=='1' || c=='2' || c=='3' || c=='4' || c=='5' || c=='6' || c=='7' || c=='8' || c=='9' || c=='0')
        return true;
    else
        return false;
}
 
 
int conv ( char s)
{
    if ( s=='1')
        return 1;
    if ( s=='2')
        return 2;
    if ( s=='3')
        return 3;
    if ( s=='4')
        return 4;
    if ( s=='5')
        return 5;
    if ( s=='6')
        return 6;
    if ( s=='7')
        return 7;
    if ( s=='8')
        return 8;
    if ( s=='9')
        return 9;
    if ( s=='0')
        return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru