C++ - извлечение строки из разделенной запятыми строки с плавающей запятой

У меня есть файл со следующим шаблоном: 0.123,0.432,0.123,ABC

Я успешно получил числа с плавающей точкой в ​​массив, но мне нужно теперь найти способ получить последнюю строку. Мой код следующий:

    vector<float> test;
    for (float v = 0; test_ss >> v; ) {
        test.push_back(v);
        test_ss.ignore();
    }

Подсказки:

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

2 ответа

RegEx было бы излишним для этой задачи, и substr вернусь string пока ты просил float вектор. Я думаю, что вам нужно использовать ifstream и читать запятую в манекене char:

#include <iostream>
#include <vector>
#include <string>
#include <fstream>

int main() 
{
    std::ifstream ifs("file.txt");

    std::vector<float> v(3);
    std::string s;
    char comma; // dummy

    if (ifs >> v[0] >> comma >> v[1] >> comma >> v[2] >> comma >> s)
    {
        for (auto i : v)
            std::cout << i << " -> ";

        std::cout << s << std::endl;
    }

    return 0;
}

Печать:

0.123 -> 0.432 -> 0.123 -> ABC

Простым решением было бы сначала заменить строку, используя std::replace( test_ss.begin(), test_ss.end(), ',', ' '); затем использовать ваш цикл for:

vector<float> test;
for (float v = 0; test_ss >> v; ) {
    test.push_back(v);
    test_ss.ignore();
}
Другие вопросы по тегам