Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/48: Рейтинг темы: голосов - 48, средняя оценка - 4.69
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
1

Перевод из строки в число

03.11.2009, 19:56. Показов 9205. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Снова я =) Работаю над калькулятором. С функцией ввода разобрался.
Значит есть строка ввода. рабочая. заполняет массив buf . Потом запускаеться функция scan_buf , она должна считать число ( пока делаю простой вариант, чтобы работал ^^ ) до знака действия т.е. пишешь в строке 51+9 жмякаешь ентер (в массиве buf : 51+9) запускаеться эта функция , в массив stack помещяться 51 . И теперь это 51 которое в массиве как символы нужно переделать в число i . Типа (ну напр.) double . В нете искал . Пробовал - не особо помогло :***( точней из того , что пробовал ничего не сработало. Помогите преобразовать stack в double число i . Работаю в Visual Studio 2008. *pz - указатель на знак ( мат. операцию +-\* ) описание строки ввода Строка ввода в калькуляторе (я немного усовершенствовал ).
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
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
 
char input_str(char (*buf), char (*opef));
void gotoxy(int xpos, int ypos);
double scan_buf(char *buf, char *oper, int p, char *stack);
 
char stack[80];
char buf[80];
char oper[]="+-*/.";
char alf[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *pz;
 
int _tmain(int argc, _TCHAR* argv[])
{
        int p;
        int z;
        double a;
        p=16;
        buf[79]='#';
        z=input_str(buf,oper,p);
        a=scan_buf(buf,oper,p,stack);
        printf("HELLO");
        printf("\n %s", buf);
        printf("\n %s", stack);
        printf("\n\n %d", a);
        getch();
        return 0;
}
 
char input_str(char (*buf), char (*oper), int p)
{
    char ch;
    int znak;
    znak=0;
    i=0;
    while(*buf!='#')
    {
    ch=getch();
    if (ch==8) 
        { 
            gotoxy(--i,0); 
            putch(NULL);
            *--buf=NULL; 
            gotoxy(i,0); 
            continue;
        }
    if (ch==13) 
        {
            break;
        }
    if (ch=='e') 
        {
            putch(ch);
            *buf++='$';
            i++;
            continue;
        }
    if(strchr(alf,ch) || (ch=='.'))
        {
            if ((strchr(alf,ch)-alf)>=p) continue;
            *buf++=ch;
            putch(ch);
            i++;
            continue;
        }
    if (strchr(oper,ch)) 
        { 
            putch(ch); 
            pz=buf;
            *buf++=ch;
            i++;
            if (ch=='+') znak=1;
            if (ch=='-') znak=2;
            if (ch=='*') znak=3;
            if (ch=='/') znak=4;
            continue;
        }
    }
    return znak;
}
 
double scan_buf(char *buf, char *oper, int p, char *stack)
{
    double i;
    i=0;
    while ((*buf!=0)&&(*buf!=*pz))
    {
        *stack++=*buf++;
    }
    //Как преобразовать ??????
    return i;
}
 
 
void gotoxy(int xpos, int ypos)
{
  COORD scrn;    
 
  HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
 
  scrn.X = xpos; scrn.Y = ypos;
 
  SetConsoleCursorPosition(hOuput,scrn);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2009, 19:56
Ответы с готовыми решениями:

Разбиение строки на части, перевод строки в число и перевод числа
Есть задание: 1. Необходимо реализовать консольное приложение, позволяющее манипулировать строкой,...

Перевод строки в число
Нужно написать перевод записи a1^b1*a2^b2*...*ak^bk в число причём записи az^0 быть не должно, и...

Перевод из строки в число
Как организовать перевод данных из строки в число для последующей арифмитической обработки. вот к...

Перевод строки в число
Помогите пожалуйста. Требуется перевести строку типа string в число типа long double. К примеру ...

12
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 23:27 2
strtol().

Добавлено через 17 секунд
Для вещественных - strtod().
0
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
04.11.2009, 21:40  [ТС] 3
попробовал следующее:
в 97 строчку писал:
C++
1
sscanf(stack,"%ld",&i);
C++
1
i=atoi(stack);
C++
1
i=strtod(buf,NULL);
strtod пробовал разные комбинации. Итог один вместо а=51 в мэине , оно при выводе всегда равно 0 .
ЗЫ проверял на выражении 51+9 .
проблема остаёться.

Можете пожалуйста написать в коде что в 97 строчку всунуть ... а то я пока что нуб в С++ =*(
0
10 / 10 / 2
Регистрация: 01.11.2009
Сообщений: 67
04.11.2009, 22:47 4
Как насчет того, чтобы использовать функцию atof?
0
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
04.11.2009, 23:44  [ТС] 5
C++
1
i=atof(stack);
Всё равно 0 =((((
Может где-то ошибка в других функциях?
0
10 / 10 / 2
Регистрация: 01.11.2009
Сообщений: 67
04.11.2009, 23:52 6
Ваш код у меня выдает дофига ошибок (куча вольностей + не виндовский компилятор), так что проверить работу не могу. Но сами смотрите. Если у вас в stack действительно записано char-овское число вида "123.2", например, то atof() с этим должен прекрасно справляться!
C++
1
2
3
4
5
6
7
#include <iostream>
using namespace std;
int main () {
    char * test = "123.2";
    cout << atof(test)+0.8 << endl;
    return 0;
}
Проверьте, то ли лежит в stack перед преобразованием.
0
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
04.11.2009, 23:55  [ТС] 7
Уряя) нашел решение проблемы) Просто после выполнения участка кода с 93й строки по 96ю указатель на stack указывает не на начало массива а на пустой его элемент .
вопщем сунул туда
C++
1
i++;
(после 95й строчки.)
В 97ю добавил цикл)
C++
1
2
3
4
5
6
    
while (i!=0)
{
       *stack--;
        i--;
}
И после использовал стандарт-ю фун-ю sscanf
C++
1
sscanf(stack,"%ld",&i);
Но она работает вроде как только с десятичными числами.
А какая функ-я работает с любой наперёд заданной системой счисленя (у меня буковка p)?

вот что получилось

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double scan_buf(char *buf, char *oper, int p, char *stack)
{
    //int *pz;
    double i;
    i=0;
    while ((*buf!=0)&&(*buf!=*pz))
    {
        *stack++=*buf++;
        i++;
    }
    while (i!=0)
    {
        *stack--;
        i--;
    }
    sscanf(stack,"%ld",&i);
    return i;
}
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
05.11.2009, 00:00 8
А какая функ-я работает с любой наперёд заданной системой счисленя (у меня буковка p)?
Пробовал иногда читать что пишут ?
strtol().
0
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
05.11.2009, 00:11  [ТС] 9
C++
1
i=strol(stack,NULL,16);
Идентефикатор не найден .
Из какой библиотеки она?
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
05.11.2009, 00:24 10
Опечатался - strtol().
1
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
05.11.2009, 00:31  [ТС] 11
Спс. наверное то , что нужно.
Только объясните плиз , как её использовать .
C++
1
i=strtol(stack,NULL,16);
В том же алгоритме (пост №7 ) даёт 0 вместо желаемых 51.
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
05.11.2009, 14:55 12
Использовать как обычно:
C
1
2
i= strtol( "100", NULL, 10 );
printf( "%d\n", i );
А ты убедись что у тебя в stack находится нужная строка.
0
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
05.11.2009, 20:47  [ТС] 13
хм. в stack попадает 51 . 0 писало потому-что %d в принтф ему не нравиццо . Но теперь вобще хрень какая-то вместо 51 почему-то 81 . В stack 51 . проверял .

Добавлено через 3 минуты
Ой...какой я бред написал !! извеняюсь ... неподумал.))))
Конечно же 51 в 16 ричной это 81 в 10тичной )))))
Просто
C++
1
 printf("%d", a);
Заменить на
C++
1
 printf("%lf", a);
В строчке 32
0
05.11.2009, 20:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2009, 20:47
Помогаю со студенческими работами здесь

Перевод строки в число
В программе пользователь вводит строку(день.месяц.год) и надо из этой строки отцепить день,месяц и...

Перевод из строки в число
У меня задача: Иммется файл, в котором записано 12 вещественных чисел. Переписать все числа файла...

Перевод из строки в число
Подскажите в чем ошибка. Метод должен принимать строку в виде $456 654 456.36 и выдавать число...

Перевод строки в число
мне дали задание перевести строку в число ... но с одним условием не использовать стандартные...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru