Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Является ли введенная последовательность числом 
:(
    Опции темы
Lemur
Дата 17.12.2005, 04:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 8.12.2005

Репутация: нет
Всего: нет



Собственно сабж... без всяких замут надо написать
как эо реализовать???
PM MAIL   Вверх
Mephistopheles
Дата 17.12.2005, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегущий от света
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 15.11.2005
Где: Где нет света

Репутация: нет
Всего: 6



Разбираешь введёное по символам и каждый сравниваешь: входит ли он в диапазон чисел по кодам ASCII. Если хоть раз нет - это не число.

Это сообщение отредактировал(а) Mephistopheles - 17.12.2005, 07:03
--------------------
Ангелы и бесы кружат надо мной.Ангел или бес - делай выбор свой.Вспыхнуть огнём; вознестись до небесДелай выбор свой: ангел или бес?© Mephistopheles, бегущий от света.
PM MAIL WWW ICQ   Вверх
Mayk
Дата 17.12.2005, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



ф-ция strtol.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Mephistopheles
Дата 18.12.2005, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегущий от света
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 15.11.2005
Где: Где нет света

Репутация: нет
Всего: 6



Mayk
Так не интересно.
--------------------
Ангелы и бесы кружат надо мной.Ангел или бес - делай выбор свой.Вспыхнуть огнём; вознестись до небесДелай выбор свой: ангел или бес?© Mephistopheles, бегущий от света.
PM MAIL WWW ICQ   Вверх
darkart
Дата 18.12.2005, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 2
Всего: 31



Входит ли каждый символ посл-ти в цифры и "."(","), если первый символ - '0', то или длина строки = 1 или после него должно стоять '.' или запятая. '.'(',') должна быть одна или её не должно бвть вовсе, она не может быть последним символом.
PM MAIL WWW ICQ Skype GTalk   Вверх
Voldemar2004
Дата 13.6.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



Вот сам недавно написал такую функцию:
Код
#include <ctype.h>
#include <string.h>
int Is_Digit(char *);

int Is_Digit(char *String)
{
        for(int i=0; i<strlen(String); i++)
        {
                if( !iswdigit(String[i]) && String[i] != '.' && String[i] != '-' )
                return 0;
        }
}
Функция возвращает 0 в случае если введенная последовательность не есть число. В противном случае - количество символов.
Код
#include <iostream.h>
#include <conio.h>

#include <ctype.h>
#include <string.h>

int Is_Digit(char *);

int main(void)
{

 cout << Is_Digit("12.0") << '\n' << Is_Digit("-00.01") << '\n' << Is_Digit("-00.01!");

getch();
return 0;
}



int Is_Digit(char *String)
{
        for(int i=0; i<strlen(String); i++)
        {
                if( !iswdigit(String[i]) && String[i] != '.' && String[i] != '-' )
                return 0;
        }
}
 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Mal Hack
Дата 13.6.2006, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 2
Всего: 261



А почему нельзя прсто через atoi прогнать и не проверить на идентичность строке "0"? 
PM ICQ   Вверх
sergejzr
Дата 13.6.2006, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Здесь 3 нюанса. 
1) обычно задания подобного рода домашка, и там надо делать ручками
2) Иногда необходимо ещё чтото делать параллельно (например заменить какието цифры, посмотреть на каком месте какая цифра итд.)
3) неизвестно, что делает стандартная функция. "Поймёт" ли кодировку? Как долго будет исполнятся?

Думаю в данном случае 1 вариант определяющий smile
А так atoi конечно лучший вариант. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Mal Hack
Дата 13.6.2006, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 2
Всего: 261



Ну не знаю, не знаю. Изврат... Я понимаю, ручками ограничить в консоли ввод только целых и дробных чисел, чтобы еще и точку там где не надо ввести было нельзя и все такое... Но это... smile 
PM ICQ   Вверх
Voldemar2004
Дата 13.6.2006, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



Цитата(sergej.z @  13.6.2006,  21:08 Найти цитируемый пост)
А так atoi конечно лучший вариант. 
Я плакаль. Дело в том, что мне требовалось написать прогу с использованием SQL на С++ builder'e - простенькую прогу, чтобы пользователи вводили определенный номер и в БД (на сервере БД) очищались определенные поля. Чтобы пользователи "случайно" не вводили цифры, содержащие посторонние симоволы, я написал эту функцию.
Цитата(Mal Hack @  13.6.2006,  21:01 Найти цитируемый пост)
А почему нельзя прсто через atoi прогнать
Код
atoi("123123d");
Ну будет у меня "123123". Зачем? smile 
 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Mal Hack
Дата 13.6.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 2
Всего: 261



Блин... Тогда тут только StrToInt smile 
PM ICQ   Вверх
sergejzr
Дата 13.6.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



strtol есть
Код

bool isNumber(char*num){

  char **end=&num;
  strtol(num, end, 10);
  return *end==0;

}

 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Voldemar2004
Дата 14.6.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



sergej.z, по-моему твоя функция всегда возвращает ноль. Из хелпа пример нормально работает:
Код
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
   char *string = "87654321", *endptr;
   long lnumber;

   /* strtol converts string to long integer  */
   lnumber = strtol(string, &endptr, 10);
   printf("string = %s  long = %ld\n", string, lnumber);

   return 0;
}
А тут одни нули:
Код
#include <conio.h>
#include <iostream.h>

#include <stdlib.h>

bool isNumber(char*);

int main(void)
{
   cout << isNumber("87654321") << '\t' << isNumber("1");

   getch();

   return 0;
}

bool isNumber(char*num)
{
  char **end=&num;
  strtol(num, end, 10);
  return *end==0;
}
Получается, что 1 тоже не является числом? smile Тогда уж лучше вот так:
Код
bool isNumber(char*num)
{
  char **end=&num;
  if( !strtol(num, end, 10) ) return *end==0;
}
 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Daevaorn
Дата 14.6.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



И мои пять копеек smile
Код

bool isNumber( const std::string& str )
{
    std::string::size_type n = str[0] == '-' ? 1 : 0;
    return str.find_first_not_of( ".0123456789", n ) == std::string::npos;
}
 
PM MAIL WWW   Вверх
sergejzr
Дата 14.6.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Да, конечно надо было так:
Компилера под рукой не было smile
Код

#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
bool isNumber(char*);
int main(void)
{
   cout << isNumber("87654321") << '\t' << isNumber("sdfg");
 //  getch();
   return 0;
}
bool isNumber(char*num)
{
  char *end=num;
  strtol(num, &end, 10);
  return *end==0;
}
 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0670 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.