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,
	  Allocator>&							    s,
       (2) (since C++14)

				  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,
	  Allocator>&							    s,
       (4) (since C++14)

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

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

XML.
	  1-3) 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,3), 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      Value    Std     Feature
	  __cpp_lib_quoted_string_io 201304L (C++14) std::quoted

Example
       // Run this code

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

	void default_delimiter()
	{
	    const std::string in = "std::quoted() quotes this string  and  em-
       bedded \"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 em-
       bedded $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
	  format  stores formatted representation of the arguments  in	a  new
       string
	  (C++20) (function template)

http://cppreference.com		  2024.06.10			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.1.quarterly>

home | help