1 / 1 / 0
Регистрация: 23.10.2014
Сообщений: 18
|
||||||
1 | ||||||
Преобразование строки в число24.10.2014, 18:33. Показов 4967. Ответов 19
Метки нет (Все метки)
Имеется переменная строкового типа string. У нее такой формат:
1561 1 6.87208 4.52665 0.10226 2.16762 Нужно написать такую функцию, чтобы вытаскивать число после определенного пробела, при этом чтобы функция возвращала это число в типе float. По сути эту функцию я написал.Однако мне кажется что данную задачу можно решить более лаконично что ли.Приведу код.Если не сложно подскажите как лучше исправить код, чтобы он был по короче(лаконичнее,проще). Заранее прошу извинения за некоторую тупость кода, т.к. на си пишу только неделю.
0
|
24.10.2014, 18:33 | |
Ответы с готовыми решениями:
19
Преобразование строки в число Преобразование из строки в число Преобразование строки в число Преобразование строки в число |
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,714
|
||||||
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
|
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,714
|
|
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
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
||||||||||||||||
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
|
Avazart
|
|||||
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
|
Вездепух
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
|
|
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
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
||||||
27.10.2014, 22:35 | 19 | |||||
8Observer8,
А можно и так:
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
||||||
27.10.2014, 22:59 | 20 | |||||
0
|
27.10.2014, 22:59 | |
27.10.2014, 22:59 | |
Помогаю со студенческими работами здесь
20
Преобразование строки в число Преобразование строки в число? Преобразование строки в число Преобразование строки в число Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |