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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 59, средняя оценка - 4.88
GAME
23 / 23 / 3
Регистрация: 31.10.2009
Сообщений: 199
#1

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

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

Снова я =) Работаю над калькулятором. С функцией ввода разобрался.
Значит есть строка ввода. рабочая. заполняет массив 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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2009, 19:56     Перевод из строки в число
Посмотрите здесь:

Перевод из строки в число - C++
Каким способом можно перевести строчку типа &quot;System::String ^&quot; в тип double?

Перевод строки в число - C++
Задание состоит в том, что нужно строку перевести в математическое выражение. Начальными данными есть строка, которая имее...

Перевод строки в число - C++
Задание таково: нужно создать функцию, которая переводит строку из чисел типа string в число типа double (строку string нужно! посимвольно...

Перевод из строки в число - C++
Подскажите в чем ошибка. Метод должен принимать строку в виде $456 654 456.36 и выдавать число типа double. double bMoney::getmoney() ...

Перевод из строки в число - C++
Извиняюсь, если такая тема уже была. Есть строка s. В ней записано 2 вещественных числа. Нужно оба записать в переменные типа float....

Перевод строки в число - C++
Помогите пожалуйста. Требуется перевести строку типа string в число типа long double. К примеру string str = &quot;1111.11&quot; long double...

Перевод строки в число - C++
У меня по заданию нужно в строку ввести числа через пробелы а потом убрать пробелы и перевести из строки в число мои цифры. #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 23:27     Перевод из строки в число #2
strtol().

Добавлено через 17 секунд
Для вещественных - strtod().
GAME
23 / 23 / 3
Регистрация: 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 строчку всунуть ... а то я пока что нуб в С++ =*(
audiophile
9 / 9 / 0
Регистрация: 01.11.2009
Сообщений: 67
04.11.2009, 22:47     Перевод из строки в число #4
Как насчет того, чтобы использовать функцию atof?
GAME
23 / 23 / 3
Регистрация: 31.10.2009
Сообщений: 199
04.11.2009, 23:44  [ТС]     Перевод из строки в число #5
C++
1
i=atof(stack);
Всё равно 0 =((((
Может где-то ошибка в других функциях?
audiophile
9 / 9 / 0
Регистрация: 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 перед преобразованием.
GAME
23 / 23 / 3
Регистрация: 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;
}
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
05.11.2009, 00:00     Перевод из строки в число #8
А какая функ-я работает с любой наперёд заданной системой счисленя (у меня буковка p)?
Пробовал иногда читать что пишут ?
strtol().
GAME
23 / 23 / 3
Регистрация: 31.10.2009
Сообщений: 199
05.11.2009, 00:11  [ТС]     Перевод из строки в число #9
C++
1
i=strol(stack,NULL,16);
Идентефикатор не найден .
Из какой библиотеки она?
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
05.11.2009, 00:24     Перевод из строки в число #10
Опечатался - strtol().
GAME
23 / 23 / 3
Регистрация: 31.10.2009
Сообщений: 199
05.11.2009, 00:31  [ТС]     Перевод из строки в число #11
Спс. наверное то , что нужно.
Только объясните плиз , как её использовать .
C++
1
i=strtol(stack,NULL,16);
В том же алгоритме (пост №7 ) даёт 0 вместо желаемых 51.
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
05.11.2009, 14:55     Перевод из строки в число #12
Использовать как обычно:
C
1
2
i= strtol( "100", NULL, 10 );
printf( "%d\n", i );
А ты убедись что у тебя в stack находится нужная строка.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2009, 20:47     Перевод из строки в число
Еще ссылки по теме:

Перевод строки в целое число - C++
Ребята подскажите пожалуйста как перевести длинную строку ,к примеру 1234567890123456 в целое число? Это уже наверное не int уже а long...

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

Перевод из строки в число в текстовом файле - C++
Доброго всем программистам дня или ночи! Написал программу, которая вычисляет к примеру x,y,z. Есть текстовый файл: text.txt (яблоко x...

Перевод строки в число и числа в строку - C++
Здравствуйте, нужен алгоритм перевода числа в строку и обратно или библиотека , хочу написать перевод десятичного числа в двоичное, спасибо

перевод строки в число, определить делится ли оно на 4 - C++
пожалуйста помогите! нужно определить делится ли строка на 4. я так понял что функция atoi не подходит, как еще это можно сделать?


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

Или воспользуйтесь поиском по форуму:
GAME
23 / 23 / 3
Регистрация: 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
Yandex
Объявления
05.11.2009, 20:47     Перевод из строки в число
Ответ Создать тему
Опции темы

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