Работа с файлами и строками C++

312
21 ноября 2017, 23:46

Дано: файл с данными, например:

иванов иван муж. 20 программист 850.50.

Нужно взять из файла строку, а из строки слова и эти слова передать в класс(string, string, string, int, string, float).

void getAccess() {
  ifstream file("./endUnemployed.txt");
  while(file) {
    string str;
    getline(file, str);
    cout << str << "\n";
  }
  file.close();
}

Вот на этом я застрял. Есть идеи как преобразовать string в разные типы, или лучше сделать строку char* и находить пробел как разделитель?

Answer 1

Первое, что приходит в голову для вашего случая:

while(file) 
{
    std::string str, delimiter = " ";
    std::getline(file, str);
    pos = str.find(delimiter);
    std::string str_1 = str.substr(0, pos);
    str.erase(0, pos + delimiter.length());
    pos = str.find(delimiter);
    std::string str_2 = str.substr(0, pos);
    str.erase(0, pos + delimiter.length());
    pos = str.find(delimiter);
    std::string str_3 = str.substr(0, pos);
    str.erase(0, pos + delimiter.length());
    pos = str.find(delimiter);
    int i_1 = std::stoi(str.substr(0, pos));
    str.erase(0, pos + delimiter.length());
    pos = str.find(delimiter);
    std::string str_4 = str.substr(0, pos);
    str.erase(0, pos + delimiter.length());
    pos = str.find(delimiter);
    float f_1 = std::stof(str.substr(0, pos));
    str.erase(0, pos + delimiter.length());
}

В переменных str_1, str_2, str_3, i_1, str_4, f_1 будет содержаться все, что необходимо для передачи в класс.

Answer 2

После считывания строки связываешь поток ввода-вывода с stringstream. stringstream это библиотечный класс, вроде как находится в sstream.

Далее оттуда читаешь как с обычного потока. Перевод во внутреннее представление осуществляется с помощью функций sto*(), которые объявлены в заголовочнике string.

Я написал про связывание ввода-вывода потому, что не понял, принципиально ли тебе считывать построчно данные из файла. Если там куча таких строк и это не так важно, то просто помни, что считывание в строку идет либо до пробела, либо до символа конца строки/файла.

READ ALSO
Как убрать уголок у textarea не используя resize: none?

Как убрать уголок у textarea не используя resize: none?

Нужно убрать уголок у textarea так, чтобы осталось свойство resize (оно нужно для выполнения скрипта)

1286