Название: QLineEdit Отправлено: tr1bls от Март 05, 2017, 10:16 Имеется QLineEdit, в который через пробел вводятся вещественные числа. Каким образом можно заполнить массив действительных чисел числами из этой строки?
Название: Re: QLineEdit Отправлено: vic57 от Март 05, 2017, 13:12 Код
Название: Re: QLineEdit Отправлено: titan83 от Март 05, 2017, 15:38 vic57, ваше решение абсолютно рабочее, но все же предложу свое без foreach (который уже давненько deprecated) и с C++11 (который уже неплохо бы использовать).
Код: QLineEdit* editor = new QLineEdit(); Название: Re: QLineEdit Отправлено: Igors от Март 10, 2017, 15:18 vic57, ваше решение абсолютно рабочее, но все же предложу свое без foreach (который уже давненько deprecated) и с C++11 (который уже неплохо бы использовать). Допустим юзер где-то ошибся напр в одном числе запятая вместо точки. Хорошо бы дать ему от ворот поворот и подсветить в QLineEdit это калечное число. Будет ли решение на С++ 11 выразительнее и/или лаконичнее? Или практически такое же как на С++ 99 ?Код: QLineEdit* editor = new QLineEdit(); Название: Re: QLineEdit Отправлено: __Heaven__ от Март 10, 2017, 15:54 А мой вариант был бы
Код
А для всякого рода проверок завёл бы валидатор lineEdit. Название: Re: QLineEdit Отправлено: Пантер от Март 10, 2017, 16:00 Как после Пайтона не хватает вот такого синтаксиса:
Код
Название: Re: QLineEdit Отправлено: __Heaven__ от Март 10, 2017, 16:57 Wut?!
Название: Re: QLineEdit Отправлено: kambala от Март 10, 2017, 17:23 Как после Пайтона не хватает вот такого синтаксиса: можно blockingMap из QtConcurrent заюзать :)Код
Название: Re: QLineEdit Отправлено: Пантер от Март 10, 2017, 18:47 Wut?! Я о том, что в Пайтоне очень красиво такая задача бы решалась:Код
Название: Re: QLineEdit Отправлено: __Heaven__ от Март 10, 2017, 21:48 Я понял :)
С непривычки синтаксис выглядит как "чё за хрень здесь творится!?" А так да, человекочитабельненько Название: Re: QLineEdit Отправлено: titan83 от Март 12, 2017, 15:26 vic57, ваше решение абсолютно рабочее, но все же предложу свое без foreach (который уже давненько deprecated) и с C++11 (который уже неплохо бы использовать). Допустим юзер где-то ошибся напр в одном числе запятая вместо точки. Хорошо бы дать ему от ворот поворот и подсветить в QLineEdit это калечное число. Будет ли решение на С++ 11 выразительнее и/или лаконичнее? Или практически такое же как на С++ 99 ?Код: QLineEdit* editor = new QLineEdit(); Взять хотя бы лямбды, можно сразу убрать одноразовые слоты длиной в одну-две строки. Название: Re: QLineEdit Отправлено: Igors от Март 17, 2017, 11:06 Допустим юзер где-то ошибся напр в одном числе запятая вместо точки. Хорошо бы дать ему от ворот поворот и подсветить в QLineEdit это калечное число. Будет ли решение на С++ 11 выразительнее и/или лаконичнее? Или практически такое же как на С++ 99 ? C++11 будет лаконичнее однозначно.Я о том, что в Пайтоне очень красиво такая задача бы решалась: И если слово не float? Код
Название: Re: QLineEdit Отправлено: Пантер от Март 17, 2017, 11:53 Упадет эксепшен.
Название: Re: QLineEdit Отправлено: titan83 от Март 17, 2017, 20:23 Допустим юзер где-то ошибся напр в одном числе запятая вместо точки. Хорошо бы дать ему от ворот поворот и подсветить в QLineEdit это калечное число. Будет ли решение на С++ 11 выразительнее и/или лаконичнее? Или практически такое же как на С++ 99 ? C++11 будет лаконичнее однозначно.Код: QLineEdit edit; Название: Re: QLineEdit Отправлено: kambala от Март 18, 2017, 12:15 щас тема опять скатится в обсуждение «регулярки/спирит vs велосипед-токенайзер»
Название: Re: QLineEdit Отправлено: titan83 от Март 18, 2017, 12:53 щас тема опять скатится в обсуждение «регулярки/спирит vs велосипед-токенайзер» Вы правы, поэтому, думаю, стоит тему закрывать. А то Igors сейчас погонит волну))Название: Re: QLineEdit Отправлено: titan83 от Март 18, 2017, 13:22 Но перед закрытием улучшу свой вариант:
Код: QLineEdit edit; Название: Re: QLineEdit Отправлено: Igors от Март 22, 2017, 11:25 А то Igors сейчас погонит волну)) :)Но перед закрытием улучшу свой вариант: Вот есть прекрасные сишные ф-ции strtol и strtod. Они пропускают символы-пробелы, считывают число и останавливаются на символе который уже не число. Разве нельзя реализовать то же самое с QString? Неужели для простейшей задачи "считать флоты разделенные пробелами" действительно необходимы два контейнера и два итератора (да еще и обширные познания в регулярке)? В итоге все равно получился велосипед - но он просто ужасен :)Код: QLineEdit edit; Название: Re: QLineEdit Отправлено: Racheengel от Март 22, 2017, 12:42 А еще есть QString::split с параметром QString::SkipEmptyParts.
Получается список токенов на выходе, а их можно уже проверять на число. Или есть QTextStream, который умеет работать со строками и через >> можно читать числа. Но strtol и strtod, действительно, заточены именно под такую задачу :) |