Можно также связаться на заголовке раздела:
Introduction
Some background
On a more personal note
...the rest of the table of contents...
...the document body...
Introduction
...section 1...
Some background
...section 2...
On a more personal note
...section 2.1...
[...]
Вы всегда можете использовать (по модулю проверки ошибок):
#include <sstream>
...
float longitude = 0.0f;
std::istringstream istr(pField);
istr >> longitude;
Стандартные iostreams по умолчанию используют глобальный языковой стандарт (который, в свою очередь, должен быть инициализирован как классический (США) языковой стандарт). Таким образом, приведенное выше должно работать в целом, если кто-то ранее не изменил глобальный языковой стандарт на что-то другое, даже если вы работаете на неанглийской платформе. Чтобы быть абсолютно уверенным, что используется желаемый языковой стандарт, создайте конкретный языковой стандарт и «наполните» поток этим языковым стандартом перед чтением из него:
#include <sstream>
#include <locale>
...
float longitude = 0.0f;
std::istringstream istr(pField);
istr.imbue(std::locale("C"));
istr >> longitude;
В качестве примечания я Обычно мы использовали регулярные выражения для проверки полей NMEA, извлечения различных частей поля как захваченных, а затем преобразования различных частей с помощью описанного выше метода. Часть перед десятичной точкой в поле долготы NMEA на самом деле форматируется как «DDDMM.mmm ..», где DDD соответствует градусам, MM.mmm - минутам (но я думаю, вы это уже знали).
Гадкий решение I ' Сделать один раз - это использовать sprintf ()
0.0f и взять второй символ из вывода. Затем во входной строке замените "." этим персонажем. Это решает проблему с запятыми, но также будет работать, если языковой стандарт определяет другие десятичные разделители.
Любая причина, по которой вы не можете выполнить setlocale «C» перед atof и восстановить локаль после этого? Может я неправильно понял вопрос ...
Вы можете перебирать все символы в массиве и заменять любые нечисловые значения на .
символ, который должен работать, пока координаты указаны в формате число-одиночный_делимитер_число
.
Вам действительно нужно получить локаль для числовых значений? Если не
setlocale(LC_ALL|~LC_NUMERIC, "");
или эквивалентное использование конструктора std :: locale.