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

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

Войти
Регистрация
Восстановить пароль
 
Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
#1

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

08.07.2015, 06:17. Просмотров 302. Ответов 7
Метки нет (Все метки)

Здравствуйте.

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

Преобразование строки в число - C++
какой аналог есть в c++ на strtoint inttostr?

Преобразование из строки в число - C++
только начала программировать на С. то есть, буквально только что открыла 10й Билдер))) такой вопрос: есть ли в С Билдере функция...

Преобразование строки в число - C++
Имеется переменная строкового типа string. У нее такой формат: 1561 1 6.87208 4.52665 0.10226 2.16762 Нужно написать такую функцию,...

Преобразование строки в число - C++
задача : реализовать деление двух целых чисел, передаваемых функции в виде строк Всем добрый вечер. Прошу ваших советов и подсказок....

Преобразование строки в число - C++
Есть строка с цифрами разделенная точкой с запятой: 1, 2, 3 string s = "1, 2, 3"; Как мне из этой строки достать по очереди все цифры и...

Преобразование char16_t строки в число - C++
Ну очень тупой вопрос - как стандартными средствами C++ преобразовать char16_t строку в число? В strtol не лезет, в wcstol не лезет,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nkey
308 / 61 / 10
Регистрация: 21.12.2011
Сообщений: 285
Завершенные тесты: 2
08.07.2015, 08:21     Преобразование строки в число #2
isdigit() проверка на число.
Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
08.07.2015, 17:55  [ТС]     Преобразование строки в число #3
Цитата Сообщение от Nkey Посмотреть сообщение
isdigit() проверка на число.
Не вариант. В строке "-1", символ '-' не цифра.
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
08.07.2015, 18:18     Преобразование строки в число #4
пишите свой парсер.
Например, Парсинг чисел из текстовика
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 1
08.07.2015, 18:26     Преобразование строки в число #5
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Не вариант. В строке "-1", символ '-' не цифра.
дак у тебя isdigit будет решающим фактором если atoi вернет 0, так что для -1 он тебе просто не нужен
Renji
1878 / 1276 / 290
Регистрация: 05.06.2014
Сообщений: 3,642
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
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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++
Столкнулся с проблемой перевода строки в double Использовал atof результат #include &lt;iostream&gt; #include &lt;cstdlib&gt; int...

Преобразование части строки типа char в число - C++
Доброго времени суток! Подскажите, как преобразовать строку типа char в число? Пример: Есть строка с датой в формате чч-мм-гг &quot;05-05-14&quot;....

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

Строковые потоки. Преобразование типов (как сделать чтобы из строки число полностью преобразовывалось в double без потери чисел) - C++
Всем привет я перевожу string в double следующим образом double fromString(const std::string&amp; s) { std::istringstream iss(s); ...


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

Или воспользуйтесь поиском по форуму:
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     Преобразование строки в число
Ответ Создать тему
Опции темы

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