Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Krasiosoft
51 / 51 / 23
Регистрация: 01.06.2015
Сообщений: 189
1

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

08.07.2015, 06:17. Просмотров 902. Ответов 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 от некорректно введенных данных?

Заранее благодарен.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2015, 06:17
Ответы с готовыми решениями:

Преобразование строки в число
Почему не работает функция StrToInt, хоть библиотеку подключил stdlib.h

Преобразование строки в число
А как многоразрядные числа из строки преобразовать? Если я использую string?

Преобразование строки в число
Вот код из учебника #include<iostream> using std::cout;using std::endl; int...

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

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

7
Nkey
308 / 61 / 12
Регистрация: 21.12.2011
Сообщений: 285
Завершенные тесты: 2
08.07.2015, 08:21 2
isdigit() проверка на число.
0
Krasiosoft
51 / 51 / 23
Регистрация: 01.06.2015
Сообщений: 189
08.07.2015, 17:55  [ТС] 3
Цитата Сообщение от Nkey Посмотреть сообщение
isdigit() проверка на число.
Не вариант. В строке "-1", символ '-' не цифра.
0
vua72
417 / 417 / 166
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
08.07.2015, 18:18 4
пишите свой парсер.
Например, Парсинг чисел из текстовика
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
08.07.2015, 18:26 5
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Не вариант. В строке "-1", символ '-' не цифра.
дак у тебя isdigit будет решающим фактором если atoi вернет 0, так что для -1 он тебе просто не нужен
0
Renji
2105 / 1545 / 471
Регистрация: 05.06.2014
Сообщений: 4,484
08.07.2015, 18:42 6
Лучший ответ Сообщение было отмечено Krasiosoft как решение

Решение

Цитата Сообщение от Krasiosoft Посмотреть сообщение
Как отличить 0 от некорректно введенных данных?
Использовать strtol. Оно скушает сколько сможет цифр, а потом скажет на каком месте число кончилось. Если это место - конец строки, значит все в норме.
C++
1
2
3
4
char*check;
long number=strtol("1234",&check,10);
if(*check)
    cout<<"опс..."<<endl;
А лучше использовать strtol. Оно еще и исключениями плюется, если, скажем, число слишком большое.
1
Mr.X
Эксперт С++
3180 / 1707 / 435
Регистрация: 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
}
0
Krasiosoft
51 / 51 / 23
Регистрация: 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");
    }
0
08.07.2015, 21:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2015, 21:56

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

Преобразование строки в число?
Написал функцию, которая введенную преобразует в число. Но при выводе пишет,...

Преобразование строки в число
Имеется переменная строкового типа string. У нее такой формат: 1561 1 6.87208...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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