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

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

Восстановить пароль Регистрация
 
Krasiosoft
 Аватар для Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
08.07.2015, 06:17     Преобразование строки в число #1
Здравствуйте.

Преобразовываю строку в число с помощью функции atoi(), но есть одна проблема:

C++
1
2
3
4
    int number;
    number=atoi("abc");  //  number == 0
    number=atoi("-1");   //  number == -1
    number=atoi("0");    //  number == 0
Как отличить 0 от некорректно введенных данных?

Заранее благодарен.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nkey
308 / 61 / 10
Регистрация: 21.12.2011
Сообщений: 267
08.07.2015, 08:21     Преобразование строки в число #2
isdigit() проверка на число.
Krasiosoft
 Аватар для Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
08.07.2015, 17:55  [ТС]     Преобразование строки в число #3
Цитата Сообщение от Nkey Посмотреть сообщение
isdigit() проверка на число.
Не вариант. В строке "-1", символ '-' не цифра.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
08.07.2015, 18:18     Преобразование строки в число #4
пишите свой парсер.
Например, Парсинг чисел из текстовика
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
08.07.2015, 18:26     Преобразование строки в число #5
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Не вариант. В строке "-1", символ '-' не цифра.
дак у тебя isdigit будет решающим фактором если atoi вернет 0, так что для -1 он тебе просто не нужен
Renji
1534 / 982 / 240
Регистрация: 05.06.2014
Сообщений: 2,956
08.07.2015, 18:42     Преобразование строки в число #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Как отличить 0 от некорректно введенных данных?
Использовать strtol. Оно скушает сколько сможет цифр, а потом скажет на каком месте число кончилось. Если это место - конец строки, значит все в норме.
C++
1
2
3
4
char*check;
long number=strtol("1234",&check,10);
if(*check)
    cout<<"опс..."<<endl;
А лучше использовать strtol. Оно еще и исключениями плюется, если, скажем, число слишком большое.
Mr.X
Эксперт С++
 Аватар для Mr.X
2799 / 1575 / 246
Регистрация: 03.05.2010
Сообщений: 3,656
08.07.2015, 20:03     Преобразование строки в число #7
В новом стандарте есть функция stoi:
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
#include <exception>
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
    for(;;)
    {
        std::cout   <<  std::endl
                    <<  std::endl
                    <<  std::endl
                    <<  "Введите строку или число: ";
 
        T_str   s;
        std::cin    >>  s;
        int     n   =   0;
 
        try
        {
            size_t  i   =   0;
 
            n   =   std::stoi   (
                                    s,
                                    &i
                                );
 
            std::cout   <<  "n = "
                        <<  n
                        <<  std::endl;
 
            if  (
                    i < s.size()
                )
            {
                std::cout   <<  "Имеется нечисловой хвост."
                            <<  std::endl;
            }
        }
        catch( std::exception   &   e )
        {
            std::cout   <<  e.what()
                        <<  std::endl;
        }
    }//for
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2015, 21:56     Преобразование строки в число
Еще ссылки по теме:

C++ Преобразование части строки типа char в число
C++ Преобразование строки в число
Преобразование строки в число C++

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

Или воспользуйтесь поиском по форуму:
Krasiosoft
 Аватар для Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
08.07.2015, 21:56  [ТС]     Преобразование строки в число #8
Цитата Сообщение от Renji Посмотреть сообщение
Использовать strtol.
Спасибо. Это именно то, что нужно было.
C++
1
2
3
4
5
6
7
    long number;
    char str2[]="-7544";
    char *pEnd;
    number=strtol(str2,&pEnd,10);
    if(*pEnd){
        printf("Error");
    }
Yandex
Объявления
08.07.2015, 21:56     Преобразование строки в число
Ответ Создать тему
Опции темы

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