LINUX.ORG.RU

C++ распарсить строку разделенную пробелами

 


0

1

Задача такая (не знаю как проще объяснить, так что..): есть строка (преобразованный вектор) вида «1.0 45.0 20.0», так вот, ее нужно преобразовать опять в float. Как это сделать ясно, не ясно как распарсить каждое из чисел через пробел в отдельную переменную, что бы на выходе получить float x(1.0),y(45.0),z(20.0) ?



Последнее исправление: raycast (всего исправлений: 1)
Ответ на: комментарий от wota

белка

котэ

Зоопарк ITT! Все в шредер, а то обезьяна вас съест!

geekless ★★
()
Ответ на: комментарий от DeVliegendeHollander

Куда человек лезет, если не в силах освоить синтаксис простейшего условного выражения?

Ну, тут дело не в синтаксисе, а в невнимательности. Но то, что нормальный компилятор выдаст на такое дело ворнинг, это не отменяет, да.

Получается, что чтобы оградить себя от случайных ошибок, человек строит костыли, вместо того, чтобы переложить эту проблему на плечи компилятора.

theNamelessOne ★★★★★
()
Ответ на: комментарий от kiverattes

Если понимать, зачем это - нет срача. Сраться о том, нужна ли безопасность?

Я не понимаю, зачем нужны Yoda Conditions. Объясни мне:

user@intel ~
$ cat > main.c
int main(void) {
    int x;
    if(x = 3);
    return 0;
}

user@intel ~
$ gcc -Wall main.c
main.c: In function 'main':
main.c:3:5: warning: suggest parentheses around assignment used as truth value [-Wparentheses]

Тут их (Yoda Conditions) нет, но безопасность не страдает! Можно даже сделать, чтобы такой код не компилировался, если добавить -Werror (или -Werror=parentheses):

user@intel ~
$ gcc -Werror=parentheses main.c
main.c: In function 'main':
main.c:3:5: error: suggest parentheses around assignment used as truth value [-Werror=parentheses]
theNamelessOne ★★★★★
()
Ответ на: комментарий от arsi

ты хоть понял, что сказал? :) нужный результат — 15, входные данные — %#@%^&!*, твои действия? :)

очевидно, входные данные - завуалированный мат, так что нужный результат от -7 до -20

registrant ★★★★★
()
Ответ на: комментарий от registrant

ты хоть понял, что сказал? :) нужный результат — 15, входные данные — %#@%^&!*, твои действия? :)

очевидно, входные данные - завуалированный мат, так что нужный результат от -7 до -20

отправьте кто-нибудь в квотезы

Stil ★★★★★
()
Ответ на: комментарий от wota

> входные данные - «1 23\n4 5 6»

4.2. входные данные — числа с плавающей точкой, разделённые пробелами. иди учись читать, фантазёр :)

arsi ★★★★★
()
Ответ на: комментарий от arsi

4.2. входные данные — числа с плавающей точкой, разделённые пробелами

рад за тебя, хорошо жить, когда есть уверенность в правильных входных данных

wota ★★
()

Почему никто не посоветовал boost::spirit? Для чего-то большего он всё равно практически не пригоден, зато на таких задачах он позволяет помастрпомедитировать на время компиляции.

//dmfd

anonymous
()
Ответ на: комментарий от theNamelessOne

Проще один раз написать 3 == x, чем следить потом за опциями компилятора (в разных платформах разных), делать выбор между тем включать Werror или нет - а если нет времени править какие-то warnings, которые проявляются только под одной платформой? Короче нет пути, проще привыкнуть делать правильно «3==x», чем потом прыгать над кодом с компилятором.

kiverattes ★☆
()
Ответ на: комментарий от kiverattes

Проще один раз написать 3 == x

это частичное решение проблемы, ведь может быть случай: y == x, предлагаю писать так:

#include <iso646.h>
....
 not ( y not_eq x )
wota ★★
()

Не проще regex из того же буста?

madcore ★★★★★
()
Ответ на: комментарий от wota

Зачот. А ещё я видел в каких-то требованиях к разработке ПО, которое в космос запускают, макросы - if ( NOTEQ(x, y) ). За применение «==» сразу расстреливают.

kiverattes ★☆
()

По сабжу - в бусте же есть старый добрый этот как его... boost::tokenizer.

kiverattes ★☆
()
Ответ на: комментарий от kiverattes

Нет, скажите, люди и правда такие тупые? = и == обычно путают в течении двух дней после перехода с паскаля на с. Ну и да, если они такие параноики, то зачем тогда вообще используют говноцэ?

anonymous
()
Ответ на: комментарий от HerrWeigel

А ещё надо писать 2 == i, а не i == 2 - это ещё на первом курсе сиплюсплюсоведческого факультета любого аграрно-промышленного института проходят.

Щито это за бред?

Полагаю, что это для того, что бы еще на этапе компеляции отловить ошибку пропуска символа «=» - «2 = i».

Так на несколько наносекунд быстрее, да?

Зависит от того, с какой скоростью будет найдена логическая ошибка тем, кто не смотрит на предупреждения компилятора.

andreyu ★★★★★
()
Ответ на: комментарий от kiverattes

Проще один раз написать 3 == x
Проще один раз написать
Проще один раз
Проще один
один

делать выбор между тем включать Werror или нет
выбор между тем включать Werror или нет
между тем включать Werror или нет
включать Werror или нет
Werror или нет
нет

нет времени править какие-то warnings

Это просто прекрасно, ящитаю. Лучшей аргументации к тезису:

надо писать 2 == i, а не i == 2 - это ещё на первом курсе сиплюсплюсоведческого факультета любого аграрно-промышленного института проходят.

просто не придумать.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Чё-то я не увидел никакого тезиса, об аргументе для которого вы чё-то пишете, ну и ладно )

kiverattes ★☆
()
Ответ на: комментарий от anonymous

Не сказать, что опечатки происходят по осознанному решению их делать.

kiverattes ★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.