![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Guest |
|
|||
|
Unregistered |
Попалась такая задача: определить является строка числом или нет с условием, первый символ строки может быть '+'.
Вот, что я смог написать. Подскажите где ошибки, заранее спасибо.
|
|||
|
||||
| Guest |
|
|||
|
Unregistered |
10-я строчка лишняя(temp[dlina]=a;)
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
а atoi нельзя пользоваться?
|
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
sergej.z
Вероятно это зачетная прога |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
если в строке присутствует запятая или точка, то atoi откинет дробную часть..
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Ну atof
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
я бы так решил:
|
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Ну а вот более простой вариант, без лишних проверок и функций.
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Ув. Guest
во первых вы пользуетесь функцией strtod от которой мы вроде отказались, во вторых Проверка на позитивное число отсутствует (и вообще на число) в третьих отсутствует копирование правильного числа в строку в четвёртых перевод в число - не нужная процедура, как видно из первого примера в пятых Ваш пример будет примерно в 100 раз медленнее моего в шестых(придирка И чего в том варианте непростого? Комментары вроде тоже есть. Ладно, напишу покороче
|
|||
|
||||
| kleks |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 6.10.2005 Репутация: нет Всего: нет |
Попалась похожая задачка..., отсюда вопрос: а если в строке встречается пробел? Т.е как сделать так, что бы если я ввёл "321 321", то программа не приняла данную строчку за число!!! Заранее благодарен...
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
проверить на наличие в строке пробелов -- strchr() ( или strstr() )
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| kleks |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 6.10.2005 Репутация: нет Всего: нет |
На сколько я понял, в вышеуказанном примере, я должен сделать буквально следующие:
В чём ошибка?! |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Она и так не примет. |
|||
|
||||
| kleks |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 6.10.2005 Репутация: нет Всего: нет |
Действительно..., а почему тогда если в гл. программе я сам ввожу заданную строку, например так:
То программа принемает это число (например "546 465")!!! Подскажите пожалуйста, что не так!!! |
|||
|
||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Усложним задачку
Добавлено @ 20:14 kleks
|
||||
|
|||||
| kleks |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 6.10.2005 Репутация: нет Всего: нет |
Извините, но я не совсем понял, как это функция работает, я пытался её использовать, но результат всё равно тот же!!! могли объяснить?! |
||||
|
|||||
| Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
А что, "1234....4324...12" у нас теперь нормальное действительное число?
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
kleks
_isdigit(const char* p) - берет каждый символ и проверяет его: цифра или нет. Если нет, то возвращаем false |
||||
|
|||||
| Helicopterr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
возник обратный вопрос - как значение переменной int i поместить в char massive [n]?
-------------------- people can fly |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
|
|||
|
||||
| sergejzr |
|
||||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Ну да, надо прибить.
Товарищи в задаче strtod, strtof, isdigit - функции библиотек, а ими пользоваться нельзя в этом случае иначе любую задачу X можно было бы решить: #include <library_for_solving_X> cout<<solve(X); Ну а если пользоваться можно всем, то почему не strtod?
Это не функции проблема, а cin он пробелом разбивает на два числа. cin как то настраивается, но я сейчас не знаю таких тонкостей, на Си давно не прогал. Добавлено @ 23:12 А, вот! cin.getline(num, длинна_num, '\n') поможет |
||||||
|
|||||||
| Helicopterr |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
ой я имел ввиду поместить на место n-го элемента с сохранением остальных. ( __int8 т.е. 0-9) -------------------- people can fly |
||||
|
|||||
| sergejzr |
|
||||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Вот пока полное решение:
Добавлено @ 23:24
|
||||||
|
|||||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
sergej.z
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Тогда смысл задания пропадает. потому что ответ={char *x="1234.44"; strtod((x),&x);} |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Хоть библиотеками пользоваться нельзя, но вот еще один метод(может string'ами можно). не претендует на скорость.
оффтоп отсюда зы. а вообще запрещать юзать стд либы это неправильно. Это всё равно что учить изобретать велосипед - зачем? От этого никому легче не становится Это сообщение отредактировал(а) Mayk - 6.10.2005, 23:37 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Скажем так, ... неинтересно
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |