forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Проверка: является ли строка числом? (http://forum.boolean.name/showthread.php?t=9230)

impersonalis 24.09.2009 11:55

Проверка: является ли строка числом?
 
Требуется сабжевая фунЕция:
необходимо проверить - можно ли содержащийся в переданном указателе на начало нуль-терминированной строки текст интерпретировать как число, в соответствии со всякими там RFC. Не хочу изобретать велик. Но если грамотных реализаций нет - то могу и обойтись)

РЕШЕНИЕ СМОТРИ В КОНЦЕ ТЕМЫ

Knightmare 24.09.2009 12:10

Ответ: Проверка: является ли строка числом?
 
Эм, спроси у MSDN про isdigit. Там правда для отдельного символа, но допилить для прверки строки уже дело техники.

impersonalis 24.09.2009 12:23

Ответ: Проверка: является ли строка числом?
 
Цитата:

Определяет, является ли самый левый символ заданного символьного выражения цифрой (от 0 до 9).
Это шняга какая-то =(
Мне надо, чтобы он корректно реагировал на числа типа:
-12.7е-984

Knightmare 24.09.2009 12:38

Ответ: Проверка: является ли строка числом?
 
Ну фиг знает, это не пойдет http://www.boost.org/doc/libs/1_40_0...xical_cast.htm? Вообще можно в бусте покопаться, там много всякой фигни.

ABTOMAT 24.09.2009 12:42

Ответ: Проверка: является ли строка числом?
 
Ну, я думаю, всё же пригодится :)
Основа-то - проверка символов:
- на +/-
- на цифры
- на Е или е
Ну и допилить порядок проверки

impersonalis 24.09.2009 13:15

Ответ: Проверка: является ли строка числом?
 
Цитата:

- на +/-
- на цифры
- на Е или е
-на места вхождения знака
-на кол-во вхождений знаков
-на плавающую точку
-на место ПТ
-на количество вхождений ПТ
-на корректность диапазона показателя
-на корректность диапазона мантиссы
+куча стаффа оговорённого стандартами текстового представления дробных чисел.
Ну и финал:
Цитата:

Не хочу изобретать велик. Но если грамотных реализаций нет - то могу и обойтись)
Т.к. реализовал уже разборку подобных вещей, когда писал класс для работы с большими числами (но там я был законодателем стандартов, превосходящих привычные числа)

Knightmare 24.09.2009 13:19

Ответ: Проверка: является ли строка числом?
 
Ну тебе скорее писать велосипед придется, если задача не типичная (не тупо взять строку с числом и перегнать в int или float).

Dream 24.09.2009 14:21

Ответ: Проверка: является ли строка числом?
 
atoi, strtol, strtod .etc не подходит? ну или другие СТЛ функции для перевода в числа строк, вроде есть там для перевода с плавающей точкой

impersonalis 24.09.2009 14:43

Ответ: Проверка: является ли строка числом?
 
Мне не перевести надо, а чекнуть валидность.
Можно конечно проверить результат конверта, и если он =0, а число не ноль, то фолс.

Knightmare 24.09.2009 14:47

Ответ: Проверка: является ли строка числом?
 
Не получится. Они конвертят до тех пор пока не встретит левый символ (типично если строка - валидное число это нулевой байт означающий конец строки).

SBJoker 24.09.2009 15:01

Ответ: Проверка: является ли строка числом?
 
А что конвертнуть строку в число, а потом проверить получилось ли число в результате, если получилось то строка может быть преобразована в число! По моему логично. А вообще это какой то маразм неиметь подобных функций "из коробки". Все современные языки располагают такими типичнейшими возможностями без добавок сторонних длл или модулей.

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

З.Ы. в VB 6.0 - isNumeric("ололо")
в С# - float.TryParse("15445.1")

impersonalis 24.09.2009 15:27

Ответ: Проверка: является ли строка числом?
 
Цитата:

проверить получилось ли число в результате
вот как это сделать?
"12БЛДЖАД!" - превратитцо в "12"
которое число

SBJoker 24.09.2009 17:38

Ответ: Проверка: является ли строка числом?
 
Ну если важно определить до единого ли символа строка число, то имеет смысл обратная конверсия и сравнение либо длин либо побайтово.

Phantom 24.09.2009 20:45

Ответ: Проверка: является ли строка числом?
 
В PHP есть функция is_numeric(), которая проверяет, является ли строка числом. Точнее находится ли в строке число. Короче, вот пример:
Цитата:

<?php

$str='123.345E-12';

if(is_numeric($str)) echo 'OK';

?>
Выведет OK. Осталось выдрать функцию из исходников PHP =)

IGR 24.09.2009 21:07

Ответ: Проверка: является ли строка числом?
 
угу в АкшнСкрипт тоже !! :)


Часовой пояс GMT +4, время: 02:13.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot