Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 24.09.2009, 21:13   #16
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проверка: является ли строка числом?

Только в великом и могучем С++ нету...
__________________
(Offline)
 
Ответить с цитированием
Старый 24.09.2009, 21:44   #17
zombiee
AnyKey`щик
 
Аватар для zombiee
 
Регистрация: 05.09.2008
Адрес: Пушкино
Сообщений: 14
Написано 7 полезных сообщений
(для 15 пользователей)
Счастье Ответ: Проверка: является ли строка числом?

bool isdigit(char *Num){
  
double Res=atof(Num);
  if(
Res!=0){
    return 
true;
  }else if(
stricmp(Num"0")==0){
      return 
true;
  }

  return 
false;

Родил... Вроде как работает) Но, блин:
23.2gh465E-1 - число
23.2465E-1 - число
sdgf23.2465E-1 - не число
т.е если первый символ - число, то и вся строка числом считается. Иначе - нет. Вотъ.
Только если в ручную парсить строку, тогда и будет понятно. со sscanf - то же самое.... Щас ещё подумаю.
// Сорри, блин, щас тока тему прочитал... Это уже обсуждалось)))))
// Да, и ещё - из пыха выдрать трудно будет. Там 5-6 (особо не вникал) функций по 200-300 строк кода... И каждую переписывать О_о

// В чистом виде нету... Есть в boost::lexical_cast. Го в гугл)
// Спасибо OreZ за подсказку)
__________________

(Offline)
 
Ответить с цитированием
Старый 24.09.2009, 21:47   #18
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Проверка: является ли строка числом?

Сказано же было - все эти функции работают пока не встретят левый символ, поэтмоу в первом случае на выходе "23.2", что есть число как бэ. В данном конкретном случае - ручной парсинг всей строки и проверка каждого символа. Если все символы до '\0' прошли проверку - это число.
(Offline)
 
Ответить с цитированием
Старый 24.09.2009, 22:12   #19
zombiee
AnyKey`щик
 
Аватар для zombiee
 
Регистрация: 05.09.2008
Адрес: Пушкино
Сообщений: 14
Написано 7 полезных сообщений
(для 15 пользователей)
Ответ: Проверка: является ли строка числом?

Да-да, меня Фантом попросил функцию из пыха выдрать) Но когда я увидел, что придётся делать - что-то мне перехотелось) Вот, нашёл в сети - функция разбора действительных чисел на чистом C++ попробуй...
__________________

(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо zombiee за это полезное сообщение:
Dream (24.09.2009), impersonalis (25.09.2009)
Старый 25.09.2009, 01:16   #20
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Проверка: является ли строка числом?

Чот жесть, мне кажется - у меня компактнее это происходило.
Всем спасибо, подождём ещё)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 25.09.2009, 01:34   #21
zombiee
AnyKey`щик
 
Аватар для zombiee
 
Регистрация: 05.09.2008
Адрес: Пушкино
Сообщений: 14
Написано 7 полезных сообщений
(для 15 пользователей)
Ответ: Проверка: является ли строка числом?

Импер, что ты собираешься ждать?) Тебе же дали готовый пример) Переписывай под себя и всё.
__________________

(Offline)
 
Ответить с цитированием
Старый 10.10.2009, 03:29   #22
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Проверка: является ли строка числом?

Уж дедлайн близится, а реализации всё нет.
Взял и набросал следующее:
bool Check(char *s,int LEN){
	enum SymbolIs{DIGIT,EXP,SEP,SIGN,ETC};
	SymbolIs Key;
	int i;
	int Epos=-1;
	int Spos=-1;
	bool ExitFlg=true;
	for(i=0;i<LEN && ExitFlg;i++){
		if(s[i]>='0' && s[i]<='9'){
			Key=DIGIT;
		}
		else if(s[i]=='E' || s[i]=='e'){
			Key=EXP;
		}
		else if(s[i]=='.' || s[i]==','){
			Key=SEP;
		}
		else if(s[i]=='+' || s[i]=='-'){
			Key=SIGN;
		}
		else{
			Key=ETC;
		}
		switch(Key){
			case DIGIT:{
				break;
					   }
			case EXP:{
				if(Epos!=-1){
					ExitFlg=false;
					break;
				}
				Epos=i;
				break;
					 }
			case SEP:{
				if(Spos!=-1){
					ExitFlg=false;
					break;
				}
				Spos=i;
				break;
					 }
			case SIGN:{
				if(i==0 || Epos==i-1){
					break;
				}
				ExitFlg=false;
				break;
					  }
			case ETC:{
				ExitFlg=false;
				break;
					 }
		}
	}
	return ExitFlg;
}
Прогоним на тестах:

Тест SBJoker
"ололо"
0
"15445.1"
1
Тест impersonalis
"12БЛДЖАД!"
0
Тест Phantom
"123.345E-12"
1
Тест zombiee
"23.2gh465E-1"
0
"23.2465E-1"
1
"sdgf23.2465E-1"
0
Тест impersonalis2
"1+1"
0
"+.12E-008"
1
"+.12E-008.1"
0
Предлагаю собравшимся отписатсья (особенное если видят ошибки).
Функция, конечно позволяет вводить фантастические занчения мантиссы и показателя, но это вполне удовлетворяет моему ТЗ.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Harter (14.03.2010)
Старый 10.10.2009, 18:26   #23
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Проверка: является ли строка числом?

но блин, никто чет не заинтересовался
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (17.10.2009)
Старый 09.10.2010, 23:32   #24
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Проверка: является ли строка числом?

Кстати, по данному запросу в яндексе лидирует некий топик "Как лучше проверить, является ли строка числом?" (http://coder007.livejournal.com/568.html). Автор кторого отключил анонимные комменты. Так что рассмотрим его код здесь:
private static boolean checkBySteps(String string) {
        if (string == null || string.length() == 0) return false;

        int i = 0;
        if (string.charAt(0) == '-') i = 1;

        for (; i < string.length(); i++) {
            final char c = string.charAt(i);
            if (!(c >= '0' && c <= '9')) {
                return false;
            }
        }

        return true;
    }
Ну, во-первых, отцензуернный коммент ДядиДимы:
<<jimon>> (22:54:44 6/10/2010)
сишарпист думает о скорости ? нет пути
А во-вторых - мои "пять копеек" (сравнивая с кодом из поста #22).
Данный парсер не может корреткно отреагировать даже на "+1". Он реагирует только на целые числа, в записи которых отсутсвует десятичная степень (12Е3).
Ну это если кто будет лабы делать..
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 09.10.2010, 23:59   #25
Morganolla
Бывалый
 
Аватар для Morganolla
 
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений
(для 245 пользователей)
Ответ: Проверка: является ли строка числом?

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

А то я блин ломаю голову!!! А С++ - очень точный язык.
ЗЫ . Проще свою функцию написать и не париться. Это и надежней будет!

Еще можно через потоковые классы. iostream. там есть возможность преобразовать из строки - число.
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
(Offline)
 
Ответить с цитированием
Старый 10.10.2010, 00:11   #26
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Проверка: является ли строка числом?

Блин, Ты по русски то нормально говори. Не в переданном указателе, а в переданном указателеМ ... ....текстЕ...
Угу - правка изначального варианта исказила смысл.
Изначально (по-русски!) имелось в виду:
текст, содержащийся в нуль-терминированной строке, указатель на которую был передан.
А не "в тексте, переданном указателем на строку". Что некорректно.
ЗЫ . Проще свою функцию написать и не париться. Это и надежней будет!
так и сделал - см пост номер 22
там есть возможность преобразовать из строки - число.
слабость такого подхода разбирается в теме. Функции трансляции либо игнорируют (обрезают) неинтерпретируемые куски (12ЙЙ=12), либо превращают их в ноль (0), что не явялется недопустимым выходом парсера (для "0"). iostream тут причём?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 10.10.2010, 00:16   #27
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Проверка: является ли строка числом?

Morganolla харе править свой пост =) Мои ответы теряют актуальность.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 20.10.2010, 13:31   #28
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Проверка: является ли строка числом?

В своё время не придал значению тому, что пустая строка ("") воспринимается как допустимое значение (подразумевая 0). При тестировании функции (точнее её реализации на Blitz3D) в полевых условиях с применением "эффекта кота" обнаружились (ВНЕЗАПНО?) дополнительные допустимые конструкции, которые уже с натяжкой можно списать на интеллектуальность парсера "строка->число". Исправляется всё просто.
Для проверки используется набор значений impersonalis-F1(FAIL-1):
E
(пустая строка)
+
-
.
Функция:
bool Check(char *s,int LEN){
	enum SymbolIs{DIGIT,EXP,SEP,SIGN,ETC};
	SymbolIs Key;
	int i;
	int Epos=-1;
	int Spos=-1;
	bool ExitFlg=true;
	bool IsClose=false;
	for(i=0;i<LEN && ExitFlg;i++){
		if(s[i]>='0' && s[i]<='9'){
			Key=DIGIT;
		}
		else if(s[i]=='E' || s[i]=='e'){
			Key=EXP;
		}
		else if(s[i]=='.' || s[i]==','){
			Key=SEP;
		}
		else if(s[i]=='+' || s[i]=='-'){
			Key=SIGN;
		}
		else{
			Key=ETC;
		}
		IsClose=false;
		switch(Key){
			case DIGIT:{
				IsClose=true;
				break;
					   }
			case EXP:{
				if(Epos!=-1){
					ExitFlg=false;
					break;
				}
				Epos=i;
				break;
					 }
			case SEP:{
				if(Spos!=-1){
					ExitFlg=false;
					break;
				}
				Spos=i;
				break;
					 }
			case SIGN:{
				if(i==0 || Epos==i-1){
					break;
				}
				ExitFlg=false;
				break;
					  }
			case ETC:{
				ExitFlg=false;
				break;
					 }
		}
	}
	if(!IsClose){
		ExitFlg=false;
	}
	return ExitFlg;
}
Если закомментить строку сброса ExitFlg при лжи в IsClose функция вновь не проходит новый тест.
Test "SBJoker"
ололо  0
15445.1 1
Test "impersonalis"
12БЛДЖАД!       0
Test "Phantom"
123.345E-12     1
Test "zombiee"
23.2gh465E-1    0
23.2465E-1      1
sdgf23.2465E-1  0
Test "impersonalis-2"
1+1     0
+.12E-008       1
+.12E-008.1     0
Test "impersonalis-F1"
E       0
        0
+       0
-       0
.       0
Присылайте ваши наборы с аргументацией некорректности работы функции!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (21.10.2010)
Старый 18.06.2012, 05:41   #29
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Проверка: является ли строка числом?

Читал тут спецификацию JSON: http://www.json.org/json-ru.html
Увидел вот эту картинку: http://www.json.org/number.gif
Вспомнил эту тему, решил запостить.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (18.06.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
строка>массив Spy4433 2D-программирование 3 24.12.2009 04:28
Строка ввода is.SarCasm Blitz3D 0 15.10.2009 19:54
цветная строка BaD RaNDoM 2D-программирование 12 20.01.2009 02:23
Парадоксальная строка Romanzes JAVA Micro Edition 2 29.11.2008 09:49
Строка в правилах... moka Юмор 2 30.07.2007 21:26


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com