Здравствуйте, loknalori, Вы писали:
L>Выражение basic_istream >> string не катит т.к. вычитается произвольное колл-во символов, промежуточный буфер тоже не катит, L>а запись вида L>
L>str.resize(4);//Не обязательно так, но суть такова
L>stream.read(&str[0],4);
L>
L>тоже не катит, т.к. на ресайзинге может кто-то поправить значение, да и вобще криво с элементами контейнеров на прямую работать.
L>Как быть?
L>Как быть?
Мне кажется, неправильно выбран тип контейнера. Если вам требуется прочесть 4 и только четыре символа, то это не строка в общепринятом смысле. Это некая последовательность символов, и значит, хранить их нужно в vector<char> и пользоваться для чтения функцией read.
Да здравствует мыло душистое и веревка пушистая.
Re: basic_istream >> string
От:
Аноним
Дата:
15.07.08 06:59
Оценка:
Здравствуйте, loknalori, Вы писали:
L>Есть basic_istream (по честному — это stringstream), надо вычитать из него ЗАДАННОЕ колличество символов и отправить в строку.
L>Выражение basic_istream >> string не катит т.к. вычитается произвольное колл-во символов, промежуточный буфер тоже не катит, L>а запись вида L>
L>str.resize(4);//Не обязательно так, но суть такова
L>stream.read(&str[0],4);
L>
L>тоже не катит, т.к. на ресайзинге может кто-то поправить значение, да и вобще криво с элементами контейнеров на прямую работать.
L>Как быть?
мысль возникла: а может подойдёт переделка std::getline() ?
тока поменять _Delim на количество, типа так:
Здравствуйте, Vamp, Вы писали:
L>>Как быть? V>Мне кажется, неправильно выбран тип контейнера. Если вам требуется прочесть 4 и только четыре символа, то это не строка в общепринятом смысле. Это некая последовательность символов, и значит, хранить их нужно в vector<char> и пользоваться для чтения функцией read.
Все правильно. Так и есть. Но после введения контейнера , к примеру вектор, вам придется совершать определенные телодвижения по преобразования в строку в общепринятом смысле. А эти телодвижения, тоже, чего-то стоят.
Вобщем вопрос достойный обсуждения, но конкретно я решил этот вопрос в сторону стринга
Здравствуйте, loknalori, Вы писали:
V>>Мне кажется, неправильно выбран тип контейнера. Если вам требуется прочесть 4 и только четыре символа, то это не строка в общепринятом смысле. Это некая последовательность символов, и значит, хранить их нужно в vector<char> и пользоваться для чтения функцией read. L>Все правильно. Так и есть. Но после введения контейнера , к примеру вектор, вам придется совершать определенные телодвижения по преобразования в строку в общепринятом смысле. А эти телодвижения, тоже, чего-то стоят.
L>Вобщем вопрос достойный обсуждения, но конкретно я решил этот вопрос в сторону стринга
только тогда не стоит писать &str[0] — для строк нет гарантии, что данные лежат последовательно в памяти.
Здравствуйте, loknalori, Вы писали:
L>Есть basic_istream (по честному — это stringstream), надо вычитать из него ЗАДАННОЕ колличество символов и отправить в строку.
21.3.7.9
1 Effects: Begins by constructing a sentry object k as if k were constructed by typename
basic_istream<charT,traits>::sentry k(is). If bool(k) is true, it calls
str.erase() and then extracts characters from is and appends them to str as if by calling
str.append(1,c). If is.width() is greater than zero, the maximum number n of characters
appended is is.width(); otherwise n is str.max_size(). Characters are extracted and
appended until any of the following occurs: — n characters are stored;
— end-of-file occurs on the input sequence;
— isspace(c,is.getloc()) is true for the next available input character c.
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
stringstream ss;
ss << "0123456789";
string s;
streamsize old = ss.width(4);
ss >> s;
cout << s;
ss.width(old);
ss >> s;
cout << '\n' << s;
}
0123
456789
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
isspace(c,is.getloc()) is true for the next available input character c.
может дать "произвольное колл-во символов", а насиловать фасеты я еще не научился
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.