1 / 1 / 0
Регистрация: 23.10.2014
Сообщений: 18
|
||||||
1 | ||||||
Преобразование строки в число24.10.2014, 18:33. Показов 5294. Ответов 19
Метки нет Все метки)
(
Имеется переменная строкового типа string. У нее такой формат:
1561 1 6.87208 4.52665 0.10226 2.16762 Нужно написать такую функцию, чтобы вытаскивать число после определенного пробела, при этом чтобы функция возвращала это число в типе float. По сути эту функцию я написал.Однако мне кажется что данную задачу можно решить более лаконично что ли.Приведу код.Если не сложно подскажите как лучше исправить код, чтобы он был по короче(лаконичнее,проще). Заранее прошу извинения за некоторую тупость кода, т.к. на си пишу только неделю.
0
|
24.10.2014, 18:33 | |
Ответы с готовыми решениями:
19
Преобразование из строки в число
|
Модератор
![]() ![]() 13734 / 10930 / 6483
Регистрация: 18.12.2011
Сообщений: 29,168
|
||||||
24.10.2014, 19:05 | 2 | |||||
НЕ обязательно переносить число в res.
Примените atof прямо к строке, начиная с этого места
0
|
1 / 1 / 0
Регистрация: 23.10.2014
Сообщений: 18
|
|
24.10.2014, 19:12 [ТС] | 3 |
Если честно не очень понял.Вот мы получили позицию начала posstart,конца posstop.Ну и длину можем понятное дело можем получить.Что нужно дальше сделать все таки?Просто
не очень понятно что такое.Ведь это получается мы складываем строку с позицией конца и потом преобразуем.И зачем это?
0
|
Модератор
![]() ![]() 13734 / 10930 / 6483
Регистрация: 18.12.2011
Сообщений: 29,168
|
|
24.10.2014, 19:19 | 4 |
Получаем адрес первого символа (stroka+posstop+1), начиная с которого надо получить число.
atof сама отбросит лишние пробельные символы впереди числа и преобразует во float число заканчивающееся последующим нечисловым символом.
0
|
1 / 1 / 0
Регистрация: 23.10.2014
Сообщений: 18
|
|
24.10.2014, 19:40 [ТС] | 5 |
Ну я говорю о том, что данная операция какая-то странная.Это char(stroka) складывается с int(posstop+1).Позицию с которой надо получить число мы знаем.Она фактически определяется в posstart.Тогда как имея ее преобразовать число начинаяя с него до пробела с помощью atof?Как конкретно она должна выглядеть команда эта тогда с atof?
Добавлено через 10 минут Да и можно такой еще вопрос.А можно вообще обойтись без преобразования string в char преобазовать сразу в число.Если такая функция?
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,680
|
||||||||||||||||
24.10.2014, 20:21 | 6 | |||||||||||||||
Можно. std::string::c_str()
Вот как-то так в первом приближении:
![]() Добавлено через 7 минут Вот вариант, когда при слишком большом номере выводится последнее число (если есть): Кликните здесь для просмотра всего текста
Ну или так: Кликните здесь для просмотра всего текста
0
|
![]() ![]() |
||||||
24.10.2014, 20:53 | 7 | |||||
Можно так:
Вывод:
1
|
![]() ![]() 3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
24.10.2014, 21:19 | 8 | |||||
0
|
24.10.2014, 21:33 | 9 | |||||
Не по теме:
Таже фигня что и lexical_cast<> блин
0
|
1 / 1 / 0
Регистрация: 23.10.2014
Сообщений: 18
|
||||||
25.10.2014, 19:51 [ТС] | 10 | |||||
Вроде самому удалось сделать код получше.Вот что получилось:
float readnumber(string text,int N)
0
|
Вездепух
![]() ![]() ![]() 12856 / 6722 / 1806
Регистрация: 18.10.2014
Сообщений: 17,020
|
|
25.10.2014, 20:01 | 11 |
Я Римский Папа, если это "получше"...
А если у вас в строке числа окажутся разделены группами пробелов (более одного побела подряд), то такие групповые пробелы как считать - как один "большой" пробел или индивидуально? Я смотрю вы их индивидуально считаете, но что-то меня мучают смутные сомнения на тему того, что такой вариант может быть кому-то нужен...
0
|
1 / 1 / 0
Регистрация: 23.10.2014
Сообщений: 18
|
|
27.10.2014, 19:18 [ТС] | 12 |
Ну как бы у меня точно вот прямо сто процентов должен быть один пробел и все тут.Эти файлы будут получаться тоже программой именно так.Так что критика тут получается без почвенная.
0
|
![]() ![]() 3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
27.10.2014, 19:24 | 13 |
Действительно, к пробелам странно привязываться. Логичнее считывать n-e по счету число. Я вначале думал, что это глупый препод такую задачу задал. Если вы сами, то ошибочное решение.
0
|
![]() ![]() 3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
27.10.2014, 21:09 | 15 |
Ничего нормального не вижу. Основной принцип программирования - не порождать лишних зависимостей. Если мы привязываемся к n-му по счету числу, то достаточно, чтобы в строке была последовательность чисел, разделенных какими угодно пробельными символами, хоть табуляцией, хоть переводом строки в каком угодно количестве. Если привязываться к пробелам, то нужно контролировать, чтобы это были именно пробелы, и по одному, и контролировать наличие пробела в начале строки. Т.е. куча совершенно ненужных зависимостей, которые всегда являются потенциальными источниками ошибок.
0
|
27.10.2014, 21:49 | 17 | ||||||||||
Допустим у нас есть строка с таким содержимым:
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,680
|
||||||
27.10.2014, 22:35 | 19 | |||||
8Observer8,
А можно и так:
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||||
27.10.2014, 22:59 | 20 | |||||
0
|
27.10.2014, 22:59 | |
Помогаю со студенческими работами здесь
20
Преобразование строки в число Преобразование строки в число Преобразование строки в число? Преобразование строки в число Преобразование строки в число Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Новые блоги и статьи
![]() |
||||
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной.
Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
|
Формулы поворота
Igor3D 10.03.2025
Добрый день
Тема
Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости".
x' = x * cos(a) - y * sin(a)
y' = y * cos(a) + x * sin(a)
Как бы Вы их. . .
|
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
|
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
|
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
|
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view.
string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
|
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
|
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет!
Отправлено 19 февраля 2025 года в 17:20:21 UTC
Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home.
Мы официально. . .
|
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
|
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
|