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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.86
vladoscom93
25 / 25 / 5
Регистрация: 14.05.2011
Сообщений: 241
20.03.2013, 22:28     Проверка является ли строка вещественным числом, если да то записать его в вещественную переменную #1
как узнать цифра или буква я знаю мне интересно вот, что например встретил я в строке цифру иду дальше в цикле записывая цифры в отдельную временную строку, потом сталкиваюсь с запятой и тоже пишу ее в нашу отдельную строку, в итоге я записал наше число в отдельную строку(пропарсил так сказать), и как мне теперь эту строку представить в вещественном типе или же в целом если число оказалось без запятой?

Добавлено через 4 минуты
работаю в VS 2010 в консольном проекте
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 22:28     Проверка является ли строка вещественным числом, если да то записать его в вещественную переменную
Посмотрите здесь:

C++ является ли введенная строка восьмеричным числом
C++ является ли введенная с клавиатуры строка вещественным числом
Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу C++
C++ Назовем число красивым, если сумма квадратов его цифр является простым числом
Определить, является ли введённая с клавиатуры строка двоичным числом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
25.03.2013, 13:28     Проверка является ли строка вещественным числом, если да то записать его в вещественную переменную #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <sstream>
 
int main()
{
    std::string number_str = "123.456";
    std::istringstream istr(number_str);
    
    double number;
    
    istr >> number;
    
    std::cout << number << std::endl;
    
    return 0;
}
Я-Лис
 Аватар для Я-Лис
29 / 64 / 13
Регистрация: 10.05.2011
Сообщений: 173
11.05.2013, 15:30     Проверка является ли строка вещественным числом, если да то записать его в вещественную переменную #3
silent_1991, как сделать проверку, что если вводятся не цифры, а символы например, то задавать определенное значение или вывести сообщение об ошибке?
Например пользователь ввел строку "1dfnls" или что-то в этом роде, т.е. введено некорректное значение, как проверить, что введенная строка не вещественное число?
В примере silent_1991 значение number будет мусор. Если присвоить значение по умолчанию перед преобразованием строки в число, то будет значение по умолчанию.
Короче мне нужно, чтоб если пользователь ввел неверное значение, вышло сообщение мол "введены неверные данные" и присвоилось значение по умолчанию.
Я попробовал написать функцию проверки:
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
int isValueFloat(string s_param)
{
    bool f = false;//есть ли точка
    for(int i=0;i<s_param.size();i++)
    {
        if((s_param[i]>='0') && (s_param[i]<='9'))
            continue;
        else if(s_param[i] == '.')
        {
            if(!f)
            {
                f = true;   //'.' уже есть
                continue;
            }
            else
                return 0;
        }
        else
        {
            //cout<<endl<<"Error: invalid value of parameter.";
            //cout<<endl<<"Value must be number"<<endl;
            return 0;
        }
    }
 
    return (1);
}
Передаю в нее string строку в которую считываю введенную строку.
Она работает если вводить число таким образом "0.00001", НО НЕ работает
если ввести в научном стиле, например 1e-5.

Добавлено через 12 минут
Кстати, затем в main() я проверяю if(isValueFloat(str)), то присваиваю number = atof(str.c_str());
C++
1
2
3
4
5
6
7
8
9
    if(isValueFloat(str))
        eps = atof(str.c_str());
    else
    {
        cout<<endl<<"Error: invalid value of parameter.";
        cout<<endl<<"Value must be number"<<endl;
        _getch();
        return 0;
    }
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
11.05.2013, 15:44     Проверка является ли строка вещественным числом, если да то записать его в вещественную переменную #4
Я-Лис, для подобных проверок отлично подойдут регулярные выражения. Составить несколько регулярных выражений для разных вариантов записи числа (т.е. например вещественное число - это некоторая последовательность цифр, начинающаяся не с нуля, или один-единственный нуль, за которыми идёт точка и некоторая последовательность цифр; для научной записи соответственно тоже составляется регулярное выражение) и проверять, соответствует ли введённая последовательность символов составленному регулярному выражению. Регулярки есть в бусте или в последнем плюсовом стандарте. В свою очередь, для конкретного регулярного выражения можно составить конечный автомат, который прекрасно реализуется на свитчах или через паттерн "Состояние".
Я-Лис
 Аватар для Я-Лис
29 / 64 / 13
Регистрация: 10.05.2011
Сообщений: 173
11.05.2013, 16:25     Проверка является ли строка вещественным числом, если да то записать его в вещественную переменную #5
silent_1991, мда..., вообще не в курсе что за регулярные выражения.
Времени нет изучать, пока забить на это.
Но за мысль спасибо.
Yandex
Объявления
11.05.2013, 16:25     Проверка является ли строка вещественным числом, если да то записать его в вещественную переменную
Ответ Создать тему
Опции темы

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