#c #string #parsing #floating-point
#c #строка #синтаксический анализ #с плавающей запятой
Вопрос:
Предположим, у нас есть строковая строка:
14.6527 39.5652 -344.226 -3.34672
Давайте назовем эту строку, str_line
.
Мой вопрос в том, как мы можем разобрать это в массив с плавающей запятой, float data[4]
.
Я пытался использовать getline из stringstream, но безрезультатно (см. Ниже Представление моего кода). Любая помощь будет оценена по достоинству 🙂
for(int i=0;i<4;i ){
stringstream ss(str_line);
ss.getline( str_line, 8, ' ' );
data[i]=atof(ss);
}
Комментарии:
1. Для чего это? Если это часть более крупного синтаксического анализатора, вы можете использовать boost spirit qi; в этом случае ваша проблема решаема с помощью однострочной строки.
2. У меня есть текстовый файл с множеством значений с плавающей запятой (каждая строка содержит 21 значение с плавающей запятой), и я хочу поместить каждое значение с плавающей запятой в массив для последующей обработки.
Ответ №1:
Вы должны объявить stringstream
объект ss
один раз, не делайте это в цикле.
Затем вам нужно использовать оператор только >>
для извлечения значений с плавающей запятой из потока.
stringstream ss(str_line);
for(int i=0;i<4;i ){
ss >> data[i];
}
Если вы читаете из файла, вы можете использовать файловый поток, подобный ifstream
файловому потоку, и читать значения с плавающей запятой непосредственно из него. Поток будет игнорировать любые пробелы, включая новые строки.
Комментарии:
1. Вы также должны проверить состояние после цикла (и, возможно, убедиться, что в нем больше не осталось данных
ss
).2. @JamesKanze Я думаю, было бы лучше, если бы OP использовался
ifstream
напрямую, реализовал соответствующий код обработки ошибок и т.д. OP может прочитать руководство по обработке потоков, чтобы понять это правильно. Этот простой вопрос касался извлечения 4 значений с плавающей запятой из строки, которая, как известно, их содержит, поэтому ответ также ограничен.
Ответ №2:
Используйте >>
оператор на stringstream
:
ss >> data[i];