Оптимальный способ получить строку или символ* в istream?

Попробуйте этот маленький однострочный. Он должен соответствовать только несжатым / сжатым IPv6-адресам (нет гибридов IPv4)

/(?!.*::.*::)(?!.*:::.*)(?!:[a-f0-9])((([a-f0-9]{1,4})?[:](?!:)){7}|(?=(.*:[:a-f0-9]{1,4}::|^([:a-f0-9]{1,4})?::))(([a-f0-9]{1,4})?[:]{1,2}){1,6})[a-f0-9]{1,4}/
22
задан kal 31 January 2009 в 22:44
поделиться

2 ответа

Если Вы хотите создать istringstream из него, символ* до нулевого символа или всего материала от станд.:: строка:

istringstream str(ptr); // char*
istringstream str(other_str); // std::string

, Если Вы говорите о желании необработанного указателя в буфер istream, Вы не можете сделать этого. Потоки получают свои данные, по запросу, если им нужны они или из файлов, терминалов или иначе, дополнительно буферизуя их материал (хорошо, не точно правильный. Можно использовать strstream, который принимает необработанный указатель и читает/пишет непосредственно из этого. Но это - класс устаревший - не используют его. Я удачлив, что никогда не делал так). Если все, что Вы хотите, является чем-то, что можно использовать несколько как указатель, можно использовать streambuf итераторы. Они не действительно указатели, хотя, таким образом, Вы не можете вычесть end от begin и другие материалы:

std::istreambuf_iterator<char> begin(one_istream), end;
while(begin != end)
    std::cout << *begin++;

, Если Вы говорите о получении строки из того, что было записано в stringstream, можно использовать ostringstream::str:

ostringstream o;
o << "This is a number: " << 42;
std::string str = o.str(); // str == "This is a number: 42"

Иначе, Вы можете только обычно читать материал из istream. Вам нужно ostream, затем можно сделать

stream.write(ptr, N);
stream.write(ptr.c_str(), ptr.c_str() + ptr.size());

для записи точно символов N из байтов, на которые указывает та ул. Можно записать это в поток с помощью [1 111] также. Это запишет всему до нулевого символа или всего от станд.:: строка, но будет уважать флаги форматирования, как ширина поля:

stream << ptr; // char*
stream << other_str; // everything from std::string
19
ответ дан 29 November 2019 в 05:01
поделиться

Это будет работать:

 std::istringstream is("abc...");

И так как istringstream является istream, Вы сможете использовать Ваш, объект как istream.

17
ответ дан 29 November 2019 в 05:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: