Читать части ifstream в строковый объект? - PullRequest
0 голосов
/ 08 декабря 2011

Я пытаюсь прочитать ifstream в строку, где я могу установить количество читаемых символов.Я прочитал документацию для ifstream.get() и ifstream.getline(), но ни один из них не выполняет то, что я хочу.

Учитывая следующую строку:

asdfghjklqwertyuiop

Я хочу читать разное количество символов за раз в строку.Я начал так, но получаю сообщение об ошибке, что нет функции, которая будет принимать строку в качестве первого параметра:

string destination;
int numberOfLettersToGet = 1;

while (inputstream.get(destination, numberOfLettersToGet)){
   //Do something.
}

Что я могу использовать вместо inputstream.get()?

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Вы можете использовать read и gcount функции-члены std::istream. get добавляет нулевой терминатор, который не нужен, когда вы читаете в std::string.

std::string destination;
int numberOfLettersToGet = 1;

destination.resize(numberOfLettersToGet);
std::streamsize n = inputstream.gcount();
inputstream.read(&destination[0], numberOfLettersToGet);
destination.resize(inputstream.gcount() - n); // handle partial read
1 голос
/ 08 декабря 2011

istream::get возвращает символ как целое число, поэтому вам просто нужно добавить возвращенный символ в качестве следующего символа строки.например,

while (string.push_back(inputstream.get()))
{ //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...