Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::quoted(3)		      C++ Standard Libary		std::quoted(3)

NAME
       std::quoted - std::quoted

Synopsis
	  Defined in header <iomanip>
	  template< class CharT	>

	  /*unspecified*/	  quoted(	 const	      CharT*	    s,
       (1) (since C++14)

	  CharT	delim=CharT('"'), CharT	escape=CharT('\\') );
	  template< class CharT, class Traits, class Allocator >

	  /*unspecified*/  quoted(  const   std::basic_string<CharT,   Traits,
       (2) (since C++14)
	  Allocator>& s,

	  CharT	delim=CharT('"'), CharT	escape=CharT('\\') );
	  template< class CharT, class Traits>

	  /*unspecified*/  quoted(  std::basic_string_view<CharT,  Traits>  s,
       (3) (since C++17)

	  CharT	delim=CharT('"'), CharT	escape=CharT('\\') );
	  template< class CharT, class Traits, class Allocator >

	  /*unspecified*/     quoted(	  std::basic_string<CharT,     Traits,
       (4) (since C++14)
	  Allocator>& s,

	  CharT	delim=CharT('"'), CharT	escape=CharT('\\') );

	  Allows  insertion and	extraction of quoted strings, such as the ones
       found in	CSV or

XML.
	  When used in an expression out << quoted(s,  delim,  escape),	 where
       out is an output
	  stream  with	char_type  equal  to  CharT  and,  for	overloads 2-4,
       traits_type equal to
	  Traits, behaves as a FormattedOutputFunction,	which inserts into out
       a sequence of
	  characters seq constructed as	follows:

	  a) First, the	character delim	is added to the	sequence
	  b) Then every	character from s, except if the	next character to out-
       put equals delim
	  or equals escape (as determined by  the  stream's  traits_type::eq),
       then first appends
	  an extra copy	of escape
	  c) In	the end, delim is appended to seq once more

	  Then,	 if  seq.size()	 <  out.width(),  adds	out.width()-seq.size()
       copies of the fill
	  character  out.fill()	 either	 at  the  end  of  the	sequence   (if
       ios_base::left is set in
	  out.flags())	or  at	the  beginning	of  the	sequence (in all other
       cases).

	  Finally, outputs each	character from the resulting sequence as if by
       calling
	  out.rdbuf()->sputn(seq,    n),     where     n=std::max(out.width(),
       seq.size()) and
	  out.width(0) to cancel the effects of	std::setw, if any.

	  4)  When used	in an expression in >> quoted(s, delim,	escape), where
       in is an	input
	  stream with char_type	 equal	to  CharT  and	traits_type  equal  to
       Traits, extracts
	  characters  from in, using std::basic_istream::operator>>, according
       to the following
	  rules:
	  a) If	the first character extracted does not equal delim (as	deter-
       mined by	the
	  stream's traits_type::eq), then simply performs in >>	s.
	  b) Otherwise (if the first character is the delimiter):
	  1) Turns off the skipws flag on the input stream
	  2) Empties the destination string by calling s.clear()
	  3)  Extracts	characters  from in and	appends	them to	s, except that
       whenever	an escape
	  character is extracted, it is	ignored	and the	next character is  ap-
       pended to s.
	  Extraction stops when	!in == true or when an unescaped delim charac-
       ter is found.
	  4) Discards the final	(unescaped) delim character.
	  5)  Restores	the  skipws  flag  on the input	stream to its original
       value.

Parameters
	  s	 - the string to insert	or extract
	  delim	 - the character to use	as the delimiter, defaults to "
	  escape - the character to use	as the escape character, defaults to \

Return value
	  Returns an object of unspecified type	such that the described	behav-
       ior takes place.

Exceptions
	  Throws std::ios_base::failure	if operator>> or operator<< throws.

Notes
	  Feature-test macro: __cpp_lib_quoted_string_io

Example
       // Run this code

	#include <iostream>
	#include <iomanip>
	#include <sstream>

	void default_delimiter() {
	  const	std::string in = "std::quoted()	quotes this string and	embed-
       ded \"quotes\" too";
	  std::stringstream ss;
	  ss <<	std::quoted(in);
	  std::string out;
	  ss >>	std::quoted(out);

	  std::cout << "Default	delimiter case:\n"
		       "read in	    [" << in <<	"]\n"
		       "stored as   [" << ss.str() << "]\n"
		       "written	out [" << out << "]\n\n";
	}

	void custom_delimiter()	{
	  const	char delim {'$'};
	  const	char escape {'%'};

	  const	 std::string in	= "std::quoted() quotes	this string and	embed-
       ded $quotes$ $too";
	  std::stringstream ss;
	  ss <<	std::quoted(in,	delim, escape);
	  std::string out;
	  ss >>	std::quoted(out, delim,	escape);

	  std::cout << "Custom delimiter case:\n"
		       "read in	    [" << in <<	"]\n"
		       "stored as   [" << ss.str() << "]\n"
		       "written	out [" << out << "]\n\n";
	}

	int main() {
	  default_delimiter();
	  custom_delimiter();
	}

Output:
	Default	delimiter case:
	read in	    [std::quoted() quotes this string  and  embedded  "quotes"
       too]
	stored as   ["std::quoted() quotes this	string and embedded \"quotes\"
       too"]
	written	 out  [std::quoted()  quotes this string and embedded "quotes"
       too]

	Custom delimiter case:
	read in	    [std::quoted() quotes this string  and  embedded  $quotes$
       $too]
	stored as   [$std::quoted() quotes this	string and embedded %$quotes%$
       %$too$]
	written	 out  [std::quoted()  quotes this string and embedded $quotes$
       $too]

See also
http://cppreference.com		  2022.07.31			std::quoted(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::quoted&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help