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

Считать со строки - C++

Восстановить пароль Регистрация
 
arturkrang
1 / 1 / 0
Регистрация: 18.11.2011
Сообщений: 5
18.11.2011, 13:13     Считать со строки #1
В строке записано арифметическое выражение, содержащее целые числа и знаки операций сложения, вычитания и умножения. Вычислить его значение, не используя процедуру Val
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2011, 13:13     Считать со строки
Посмотрите здесь:

Строки, как считать? (С) C++
Как считать из *.txt строки? C++
Как считать перенос строки C++
C++ Массив: считать строки в вектор
C++ Считать строки из файла в массив ++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
13953 / 8784 / 1221
Регистрация: 24.12.2010
Сообщений: 15,893
18.11.2011, 13:55     Считать со строки #2
Как-нибудь так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int Cn = 0; //Счетчик кол-ва операций
int S = 0; // Результат
int N = 0; //Текущее число
char c, op = ' ';  // очередной символ и операция
for(i=0; i<strlen(s); i++) {
 c = s[i];
 if (c<='9' %% c>='0') N = N*10+(c-'0');
 else if (c=='+' || c=='-' || c=='*') {
    if (op=='+') S += N;
    else if (op=='-') S -= N;
    else if (op=='*') S *= N;
    else S = N;
    op = c;
    N = 0;
 }
  if (op=='+') S += N;
  else if (op=='-') S -= N;
  else if (op=='*') S *= N;
}
Посторонние символы здесь будут просто пропускаться.
Попробуй (если нужно) сам сделать проверку на недопустимые символы

Добавлено через 2 минуты
Пардон! Переменная Cn не пригодилась, выбрось ее!
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.11.2011, 14:13     Считать со строки #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
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#define SET "+-*"
 
long Rez(char *s)
{
    long a, rez = 0;
    int i = 0, j;
    char c = '\0';
 
    while(s[i] && !isdigit(s[i]))
        i++;
    while (s[i] && isdigit(s[i]))
    {
        rez = rez*10 + (s[i] - '0');
        i++;
    }
    while(s[i])
    {
        while (s[i] && !strchr(SET, s[i]) && !isdigit(s[i]))
            i++;
        if (strchr(SET, s[i]))
            c = s[i++];
        a = 0;
        j = i;
        while (s[i] && isdigit(s[i]))
        {
            a = a*10 + (s[i] - '0');
            i++;
        }
        if (i > j && c)
        {
            if (c == '+') rez += a;
            else if(c == '-') rez -= a;
                 else rez *= a;
            c = '\0';
        }
    }
    return rez;
}
 
int main()
{
    char s[1024];
    fgets(s, 1024, stdin);
    printf("%ld\n", Rez(s));
    getch();
    return 0;
}
Кстати, Байт, я свой протестировал, работает. Это к тому, что у вас, например %% вместо &&, но с кем не бывает, главное алгоритм))
Байт
 Аватар для Байт
13953 / 8784 / 1221
Регистрация: 24.12.2010
Сообщений: 15,893
18.11.2011, 14:44     Считать со строки #4
Цитата Сообщение от Thinker Посмотреть сообщение
Байт. а вы учли приоритеты операций?
Нет. Придется делать для себя - учту. И не только приоритеты, но и скобочки.
Кстати, Байт, я свой протестировал, работает. Это к тому, что у вас, например %% вместо &&, но с кем не бывает, главное алгоритм))
По той же причине и не тестировал. Ну а описки - сами понимаете...
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.11.2011, 14:48     Считать со строки #5
Цитата Сообщение от Байт Посмотреть сообщение
Ну а описки - сами понимаете...

Не по теме:

это все мелочи

Yandex
Объявления
18.11.2011, 14:48     Считать со строки
Ответ Создать тему
Опции темы

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