VMS Help
CXXLSTD, string

 *Conan The Librarian

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

   NAME

   basic_string,string  - A templated class for handling	sequences of
   character-like entities.  string and wstring are specialized
   versions	of basic_string for chars and wchar_ts, respectively.

   This page describes the ANSI basic_string class.  If you would like
   information on the	pre-ANSI string	class, use the command:

        help cxxl

   typedef basic_string <char> string;
   typedef basic_string <wchar_t> wstring;

 SYNOPSIS

   #include <string>

   template <class charT,
 	   class traits	= char_traits<charT>,
 	   class Allocator = allocator<charT> >

   class	basic_string;

 DESCRIPTION

   basic_string<charT, traits, Allocator> is a homogeneous collection
   of character-like entities.  It provides	general	string
   functionality  such as compare, append, assign, insert, remove, and
   replace , along  with various searches.  basic_string also functions
   as an STL sequence  container, providing random	access
   iterators.  This	allows some of the generic algorithms to apply
   to strings.

   Any underlying character-like	type may be used as long as an
   appropriate string_char_traits class is provided or the default
   traits class is applicable.

 INTERFACE

   template <class charT,
 	   class traits	= char_traits<charT>,
 	   class Allocator = allocator<charT> >
   class	basic_string {

   public:

   // Types

   typedef traits			       traits_type;
   typedef typename traits::char_type	       value_type;
   typedef Allocator			       allocator_type;

   typename size_type;
   typename difference_type;
   typename reference;
   typename const_reference;
   typename pointer;
   typename const_pointer;
   typename iterator;
   typename const_iterator;
   typename const_reverse_iterator;
   typename reverse_iterator;

   static const size_type npos =	-1;

   // Constructors/Destructors

   explicit basic_string(const Allocator& = Allocator());
   basic_string (const basic_string<charT, traits, Allocator>&);
   basic_string(const basic_string&, size_type, size_type = npos);
   basic_string(const charT*, size_type,
 	      const Allocator& = Allocator());
   basic_string(const charT*, Allocator&	= Allocator());
   basic_string(size_type, charT,
 	      const Allocator& = Allocator());
   template <class InputIterator>
   basic_string(InputIterator, InputIterator,
 	      const Allocator& = Allocator());
   ~basic_string();

   // Assignment	operators
   basic_string&	operator=(const	basic_string&);
   basic_string&	operator=(const	charT*);
   basic_string&	operator=(charT);

   // Iterators

   iterator	 begin();
   const_iterator begin() const;
   iterator	 end();
   const_iterator end() const;

   reverse_iterator	 rbegin();
   const_reverse_iterator rbegin() const;
   reverse_iterator	 rend();
   const_reverse_iterator rend()	const;

   // Capacity

     size_type	    size() const;
     size_type	    length() const;
     size_type	    max_size() const;
     void	    resize(size_type, charT);
     void	    resize(size_type);
     size_type	    capacity() const;
     void	    reserve(size_type);
     bool	    empty() const;

   // Element access

     const_reference operator[](size_type) const;
     reference	    operator[](size_type);
     const_reference at(size_type) const;
     reference	    at(size_type);

   // Modifiers

     basic_string& operator+=(const basic_string&);
     basic_string& operator+=(const charT*);
     basic_string& operator+=(charT);

     basic_string& append(const basic_string&);
     basic_string& append(const basic_string&,
 			 size_type, size_type);
     basic_string& append(const charT*, size_type);
     basic_string& append(const charT*);
     basic_string& append(size_type, charT);
     template<class InputIterator>
      basic_string& append(InputIterator, InputIterator);

     basic_string& assign(const basic_string&);
     basic_string& assign(const basic_string&,
 			 size_type, size_type);
     basic_string& assign(const charT*, size_type);
     basic_string& assign(const charT*);
     basic_string& assign(size_type, charT);
     template<class InputIterator>
      basic_string& assign(InputIterator, InputIterator);

     basic_string& insert(size_type, const basic_string&);
     basic_string& insert(size_type, const basic_string&,
 			 size_type, size_type);
     basic_string& insert(size_type, const charT*, size_type);
     basic_string& insert(size_type, const charT*);
     basic_string& insert(size_type, size_type, charT);
     iterator insert(iterator, charT = charT());
     void insert(iterator, size_type, charT);
     template<class InputIterator>
      void insert(iterator, InputIterator,
 		InputIterator);

     basic_string& erase(size_type = 0, size_type= npos);
     iterator erase(iterator);
     iterator erase(iterator, iterator);

     basic_string& replace(size_type, size_type,
 			  const	basic_string&);
     basic_string& replace(size_type, size_type,
 			  const	basic_string&,
 			  size_type, size_type);
     basic_string& replace(size_type, size_type,
 			  const	charT*,	size_type);
     basic_string& replace(size_type, size_type,
 			  const	charT*);
     basic_string& replace(size_type, size_type,
 			  size_type, charT);
     basic_string& replace(iterator, iterator,
 			  const	basic_string&);
     basic_string& replace(iterator, iterator,
 			  const	charT*,	size_type);
     basic_string& replace(iterator, iterator,
 			  const	charT*);
     basic_string& replace(iterator, iterator,
 			  size_type, charT);
     template<class InputIterator>
      basic_string& replace(iterator, iterator,
 			  InputIterator, InputIterator);

     size_type copy(charT*, size_type, size_type	= 0);
     void swap(basic_string<charT, traits, Allocator>&);

   // String operations

     const charT* c_str() const;
     const charT* data()	const;
     const allocator_type& get_allocator() const;

     size_type find(const basic_string&,
 		   size_type = 0) const;
     size_type find(const charT*,
 		   size_type, size_type) const;
     size_type find(const charT*, size_type = 0)	const;
     size_type find(charT, size_type = 0) const;
     size_type rfind(const basic_string&,
 		    size_type =	npos) const;
     size_type rfind(const charT*,
 		    size_type, size_type) const;
     size_type rfind(const charT*,
 		    size_type =	npos) const;
     size_type rfind(charT, size_type = npos) const;

     size_type find_first_of(const basic_string&,
 			    size_type =	0) const;
     size_type find_first_of(const charT*,
 			    size_type, size_type) const;
     size_type find_first_of(const charT*,
 			    size_type =	0) const;
     size_type find_first_of(charT, size_type = 0) const;

     size_type find_last_of(const basic_string&,
 			   size_type = npos) const;
     size_type find_last_of(const charT*,
 			   size_type, size_type) const;
     size_type find_last_of(const charT*, size_type = npos) const;
     size_type find_last_of(charT, size_type = npos) const;

     size_type find_first_not_of(const basic_string&,
 				size_type = 0) const;
     size_type find_first_not_of(const charT*,
 				size_type, size_type) const;
     size_type find_first_not_of(const charT*, size_type	= 0) const;
     size_type find_first_not_of(charT, size_type = 0) const;

     size_type find_last_not_of(const basic_string&,
 			       size_type = npos) const;
     size_type find_last_not_of(const charT*,
 			       size_type, size_type) const;
     size_type find_last_not_of(const charT*,
 			       size_type = npos) const;
     size_type find_last_not_of(charT, size_type	= npos)	const;

     basic_string substr(size_type = 0, size_type = npos) const;
     int	compare(const basic_string&) const;
     int	compare(size_type, size_type, const basic_string&) const;
     int	compare(size_type, size_type, const basic_string&,
 		size_type, size_type) const;
     int	compare(size_type, size_type, charT*) const;
     int	compare(charT*)	const;
     int	compare(size_type, size_type, const charT*, size_type) const;
   };

   // Non-member	Operators

   template <class charT, class traits, class Allocator>
   basic_string operator+ (const	basic_string&,
 			  const	basic_string&);
   template <class charT, class traits, class Allocator>
   basic_string operator+ (const	charT*,	const basic_string&);
   template <class charT, class traits, class Allocator>
   basic_string operator+ (charT, const basic_string&);
   template <class charT, class traits, class Allocator>
   basic_string operator+ (const	basic_string&, const charT*);
   template <class charT, class traits, class Allocator>
   basic_string operator+ (const	basic_string&, charT);

   template <class charT, class traits, class Allocator>
   bool operator== (const basic_string&,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator== (const charT*, const basic_string&);
   template <class charT, class traits ,	class Allocator>
   bool operator== (const basic_string&,	const charT*);

   template <class charT, class traits, class Allocator>
   bool operator< (const	basic_string&, const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator< (const	charT*,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator< (const	basic_string&, const charT*);

   template <class charT, class traits, class Allocator>
   bool operator!= (const basic_string&,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator!= (const charT*, const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator!= (const basic_string&,	const charT*);

   template <class charT, class traits, class Allocator>
   bool operator> (const	basic_&, const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator> (const	charT*,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator> (const	basic_string&, const charT*);

   template <class charT, class traits, class Allocator>
   bool operator<= (const basic_string&,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator<= (const charT*, const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator<= (const basic_string&,	const charT*);

   template <class charT, class traits, class Allocator>
   bool operator>= (const basic_string&,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator>= (const charT*, const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator>= (const basic_string&,	const charT*);

   template <class charT, class traits, class Allocator>
   void swap(basic_string<charT,traits,Allocator>& a,
 	   basic_string<charT,traits,Allocator>& b);

   template<class charT,	class traits, class Allocator>
   istream& operator>> (istream&, basic_string&);
   template <class charT, class traits, class Allocator>
   ostream& operator<< (ostream&, const basic_string&);
   template <class Stream, class	charT,
 	   class traits, class Allocator>
   Stream& getline (Stream&, basic_string&, charT);

 CONSTRUCTORS AND DESTRUCTORS

   In all cases,	the Allocator parameter	will be	used for storage
   management.

   explicit
   basic_string (const Allocator& a = Allocator());
      The default constructor.  Creates a basic_string with the following
      effects:

      data()   a	non-null pointer that is copyable and can have 0 added
      to it

      size()   0

      capacity()	  an unspecified value

   basic_string (const basic_string<T, traits, Allocator>& str);
      Copy constructor. Creates a string	that is	a copy of str.

   basic_string (const basic_string &str, size_type pos,
 	       size_type n= npos);
 		  Creates a string if pos<=size() and determines length
                   rlen of initial string value as the smaller of n and
                   str.size() - pos. This has the following	effects:

 		  data()   points at the first element of an allocated
                            copy of rlen elements of the string controlled
                            by	str beginning at	position pos

 		  size()   rlen

 		  capacity()   a value at least	as large as size()

 		  get_allocator()   str.get_allocator()

 		  An out_of_range exception will be thrown if
                   pos>str.size().

   basic_string (const charT* s,	size_type n,
 	       const Allocator&	a = Allocator());
 		  Creates a string that	contains the first n characters
                   of s. s must not be	a NULL pointer.	 The effects of
                   this constructor are:

 		  data()   points at the first element of an allocated
                            copy of the array	whose first element is
                            pointed at by s

 		  size()   n

 		  capacity()   a value at least	as large as size()

 		  An out_of_range exception will be thrown if n	== npos.

   basic_string (const charT * s,
 	       const Allocator&	a = Allocator());
 		  Constructs a string containing all characters	in s up
                   to, but not including, a traits::eos() character.
                   s must not be a null pointer. The effects of this
                   constructor are:

 		  data()   points at the first element of an allocated
                            copy of the array	whose first element is
                            pointed at by s

 		  size()   traits::length(s)

 		  capacity()   a value at least	as large as size()

   basic_string (size_type n, charT c,
 	       const Allocator&	a  = Allocator());
 		  Constructs a string containing n repetitions of c.  A
 		  length_error exception is thrown if n	== npos.  The
                   effects of this constructor are:

 		  data()   points at the first element of an allocated
                            array of n	elements, each storing the
                            initial value c

 		  size()   n

 		  capacity()   a value at least	as large as size()

   template <class InputIterator>
   basic_string	(InputIterator first, InputIterator last,
 		const Allocator& a = Allocator());
 		   Creates a basic_string of length last - first,
                    filled with all values obtained by dereferencing
                    the InputIterators on the range [first, last).
                    The	effects	of this	constructor are:

 		   data()   points at the first	element	of an allocated
                             copy of the elements in the range
                             [first,last)

 		   size()   distance between first and last

 		   capacity()	a value	at least as large as size()

   ~basic_string	();
      Releases any allocated memory for this basic_string.

 OPERATORS

   basic_string&
   operator= (const basic_string& str);
      Assignment	operator. Sets the contents of this string to be the
      same as str.  The effects of operator= are:

      data()   points at	the first element of an	allocated copy of
               the array whose first element is pointed at
               by str.size()

      size()   str.size()

      capacity()	  a value at least as large as size()

   basic_string&
   operator= (const charT * s);
      Assignment	operator. Sets the contents of this string to be the
      same as s up to, but not including, the traits::eos() character.

   basic_string&
   operator= (charT c);
      Assignment	operator. Sets the contents of this string to be equal
      to the single charT c.

   const_reference
   operator[] (size_type	pos) const;
   reference
   operator[] (size_type	pos);
      If	pos < size(), returns the element at position pos in this
      string. If	pos == size(),	the const version returns traits::eos(),
      the behavior of	the non-const version is undefined.  The
      reference returned by either version is	invalidated by any
      call	to c_str(), data(), or any non-const member function
      for the object.

   basic_string&
   operator+= (const basic_string& s);
   basic_string&
   operator+= (const charT* s);
   basic_string&
   operator+= (charT c);
      Concatenates a string onto	the current contents of	this string.
      The second member operator uses traits::length() to determine the
      number of elements from s to	add.  The third	member operator
      adds the single	character c.  All return a reference to this
      string after completion.

 ITERATORS

   iterator begin ();
   const_iterator begin () const;
      Return an iterator	initialized to the first element of the	string.

   iterator end ();
   const_iterator end ()	const;
      Return an iterator	initialized to the position after the last
      element of the string.

   reverse_iterator rbegin ();
   const_reverse_iterator rbegin	() const;
      Returns an	iterator equivalent to reverse_iterator(end()).

   reverse_iterator rend	();
   const_reverse_iterator rend () const;
      Returns an	iterator equivalent to reverse_iterator(begin()).

 ALLOCATOR

   const	allocator_type get_allocator ()	const;
      Returns a copy of the allocator used by self for storage management.

 MEMBER FUNCTIONS

   basic_string&
   append (const	basic_string& s, size_type pos,	size_type npos);
   basic_string&
   append (const	basic_string& s);
   basic_string&
   append (const	charT* s, size_type n);
   basic_string&
   append (const	charT* s);
   basic_string&
   append (size_type n, charT c );
   template<class InputIterator>
   basic_string&
   append (InputIterator	first, InputIterator last);
      Append another string to the end of this string.  The first two
      functions append the lesser of n and s.size() - pos characters of s,
      beginning at position pos to this string.	 The second member will
      throw an	out_of_range exception if pos >	str.size().  The third
      member appends n characters of the array pointed to by s.	 The
      fourth variation appends elements from the array pointed to
      by s up	to, but	not including, a traits::eos() character.
      The fifth variation appends n repetitions of c.	 The final
      append function appends the elements	specified in the
      range [first, last).

      All functions will	throw a	length_error exception if the
      resulting length will exceed	max_size().  All return	a
      reference to this string after completion.

   basic_string&
   assign (const	basic_string& s);
   basic_string&
   assign (const	 basic_string& s,
 	size_type pos, size_type n);
   basic_string&
   assign (const	charT* s, size_type n);
   basic_string&
   assign (const	charT* s);
   basic_string&
   assign (size_type n, charT c );
   template<class InputIterator>
   basic_string&
   assign (InputIterator	first, InputIterator last);

      Replace the value of this string with the value of	another.

      All versions of the function assign values	to this	string.	 The
      first two variations assign the lesser of n and s.size()	- pos
      characters of s,	beginning at position pos.  The	second
      variation  throws	an out_of_range exception if pos > str.size().
      The third  version of the function assigns n	characters of
      the array	pointed	to by s.  The fourth version assigns elements
      from the array pointed  to	by s up	to, but	not including,	a
      traits::eos()	character.   The	fifth assigns one or n
      repetitions of c.	The last  variation assigns the members
      specified by the range [first, last).

      All functions will	throw a	length_error  exception	if the
      resulting length will exceed	max_size(). All	return a
      reference to this string after completion.

   const_reference
   at (size_type	pos) const;
   reference
   at (size_type	pos);
      If	pos < size(), returns the element at position pos in this
      string. Otherwise,	an out_of_range	exception is thrown.

   size_type
   capacity () const;
      Returns the current storage capacity of the string. This is
      guaranteed  to	be at least as large as	size().

   int
   compare (const basic_string& str);
      Returns the result	of a lexicographical comparison	between
      elements of this string and elements of str.  The return value
      is:

      <0	    if size() <	str.size()
      0	    if size() == str.size()
      >0	    if size() >	str.size()

   int
   compare (size_type pos1, size_type n1,
 	  const	basic_string& str) const;
   int
   compare (size_type pos1, size_type n1, const basic_string& str,
 	  size_type pos2, size_type n2)	const;
   int
   compare (charT* s) const;
   int
   compare (size_type pos, size_type n1,	charT* s) const;
   int
   compare (size_type pos, size_type n1,	charT* s,
 	  size_type n2)	const;
      Return the	result of a lexicographical comparison between
      elements of this string and a	given comparison string.  The
      members return, respectively:

 	  compare (str)
 	  compare (basic_string	(str, pos2, n2))
 	  compare (basic_string(s))
 	  compare (basic_string(s, npos))
 	  compare (basic_string	(s,n2))

   size_type
   copy (charT* s, size_type n,	size_type pos =	0) const;
      Replaces elements in memory with copies of	elements from this
      string. An	out_of_range exception will be thrown if pos > size().
      The lesser of n and size() - pos	 elements of this string,
      starting at position pos are copied	into the array pointed
      to by s.	 No terminating	null is appended to s.

   const	charT*
   c_str	() const;
   const	charT*
   data () const;
      Return a pointer to the initial element of	an array whose first
      size() elements are copies of the	elements in this string.
      A traits::eos() element is	appended to the	end.  The elements of
      the array	may not	be altered, and the returned pointer is only
      valid until a non-const member function of this string is	called.
      If size() is zero, the data() function returns a NULL pointer.

   bool empty ()	const;
      Returns size() == 0.

   basic_string&
   erase	(size_type pos = 0, size_type n	= npos);
   iterator
   erase	(iterator p);
   iterator
   erase	(iterator first, iterator last);
      This function removes elements from the string, collapsing
      the remaining elements, as necessary, to	remove any space
      left empty.  The first	version of the function removes the
      smaller of n and size() -	pos  starting at	position pos.
      An out_of_range exception will be thrown	if  pos	>
      size().  The  second version requires  that p is a	valid
      iterator on this string, and removes the character referred to
      by p. The last version of erase requires that both first and
      last are valid iterators on this string, and removes the
      characters defined by	the range [first,last).  The destructors
      for all removed characters	are called.   All versions of erase
      return a	reference to this string after completion.

   size_type
   find (const basic_string& str, size_type pos = 0) const;
      Searches for the first occurrence of the substring	specified by
      str in this string, starting at position pos.  If	found, it
      returns  the index of	the first character of the matching
      substring.	If not found, returns npos. Equality is defined by
      traits::eq().

   size_type
   find (const charT* s,	size_type pos, size_type n) const;
   size_type
   find (const charT* s,	size_type pos =	0) const;
   size_type
   find (charT c, size_type pos = 0) const;
      Search for	the first sequence of characters in this string	that
      match a specified string.	The variations of this function
      return,	respectively:

      find(basic_string(s,n), pos)
      find(basic_string(s), pos)
      find(basic_string(1, c), pos)

   size_type
   find_first_not_of (const basic_string& str,
 		    size_type pos = 0) const
      Searches	for the	first element of this string  at	or
      after position pos that is not  equal to any element of str.  If
      found, find_first_not_of returns the index of the non-matching
      character. If all of the  characters match, the function returns
      npos.   Equality is defined by traits::eq().

   size_type
   find_first_not_of  (const charT* s,
 		     size_type pos, size_type n) const;
   size_type
   find_first_not_of (const charT* s,
 		    size_type pos = 0) const;
   size_type
   find_first_not_of (charT c, size_type	pos = 0) const;
      Search for	the first element in this string at or after position
      pos that is not equal to any element of a given set of
      characters.  The members return, respectively:

      find_first_not_of(basic_string(s,n), pos)
      find_first_not_of(basic_string(s),	pos)
      find_first_not_of(basic_string(1, c), pos)

   size_type
   find_first_of(const basic_string& str,
 	       size_type pos = 0) const;
      Searches for the first occurrence at or after	position pos
      of any element of str	in this	string.	  If found, the index
      of this matching character is returned.  If not found, npos is
      returned.  Equality is defined by traits::eq().

   size_type
   find_first_of(const charT*  s,  size_type  pos,
 	       size_type n) const;
   size_type
   find_first_of(const charT* s,	size_type pos =	0) const;
   size_type
   find_first_of	(charT c, size_type pos	= 0) const;
      Search for	the first occurrence in	this  string of	any element in
      a specified string.	The find_first_of variations return,
      respectively:

      find_first_of(basic_string(s,n), pos)
      find_first_of(basic_string(s), pos)
      find_first_of(basic_string(1, c), pos)

   size_type
   find_last_not_of(const basic_string& str,
 		  size_type pos	= npos)	const;
      Searches for the last element of this string at or before
      position pos that is not equal to any  element of str.  If
      find_last_not_of finds a  non-matching element, it	returns	the
      index of  the character.  If	all the	elements match, the
      function returns npos.  Equality is defined by	traits::eq().

   size_type
   find_last_not_of(const charT*	s,
 		  size_type pos, size_type n) const;
   size_type
   find_last_not_of(const charT*	s, size_type pos = npos) const;
   size_type
   find_last_not_of(charT c, size_type pos = npos) const;
      Search for	the last element in this string	at or  before position
      pos that is not equal to any element of a given set of
      characters.  The members return, respectively:

      find_last_not_of(basic_string(s,n), pos)
      find_last_not_of(basic_string(s), pos)
      find_last_not_of(basic_string(1, c), pos)

   size_type
   find_last_of(const basic_string& str,
 	      size_type	pos = npos) const;
      Searches for the last occurrence of any element of  str	at or
      before	position pos in	this string.   If found,
      find_last_of returns the index of the  matching character.  If
      not found find_last_of returns  npos.  Equality is defined by
      traits::eq().

   size_type
   find_last_of(const charT* s, size_type pos,
 	      size_type	n) const;
   size_type
   find_last_of(const charT* s, size_type pos = npos) const;
   size_type
   find_last_of(charT c,	size_type pos =	npos) const;
      Search for	the last occurrence in this string of any element
      in a specified string.  The members return, respectively:

      find_last_of(basic_string(s,n), pos)
      find_last_of(basic_string(s), pos)
      find_last_of(basic_string(1, c), pos)

   basic_string&
   insert(size_type pos1, const basic_string& s);
   basic_string&
   insert(size_type pos,	const  basic_string& s,
 	size_type pos2 = 0, size_type n	= npos);
   basic_string&
   insert(size_type pos,	const charT* s,	size_type n);
   basic_string&
   insert(size_type pos,	const charT* s);
   basic_string&
   insert(size_type pos,	size_type n, charT c);
      Insert additional elements	at position pos	in this	string.	 All
      of	the variants of this function will throw an out_of_range
      exception if pos >  size().  All variants will	also throw a
      length_error if the resulting string will exceed	max_size().
      Elements of this string will be moved apart as necessary	to
      accommodate the inserted elements.  All return a reference to this
      string after completion.

      The second	variation of this function inserts the lesser of n and
      s.size() -	pos2 characters	of s, beginning	at position pos2 in
      this string.  This version will	throw an out_of_range
      exception	if   pos2  > s.size().	The third version inserts n
      characters of the  array pointed to	by s.  The fourth
      inserts elements from	the  array pointed to by	s up
      to, but not including,  a traits::eos()  character.
      Finally, the fifth variation inserts n repetitions of	c.

   iterator
   insert(iterator p, charT c = charT());
   void
   insert(iterator p, size_type n, charT	c);
   template<class InputIterator>
   void
   insert(iterator p, InputIterator first, InputIterator	last);
      Insert additional elements	in this	 string	 immediately before
      the	character referred to by p.  All of these versions of
      insert require that p is	a valid	iterator on this string.  The
      first version inserts a copy of c.	 The second version inserts n
      repetitions of c.	 The third version
      inserts characters	in the range [first, last).  The first version
      returns p.

   size_type
   length() const;
      Return the	number of elements contained in	this string.

   size_type
   max_size() const;
      Returns the maximum possible size of the string.

   size_type
   rfind	(const basic_string& str, size_type pos	 = npos) const;
      Searches for the last occurrence of the substring	specified by
      str in this string, starting at position pos. Note that only the
      first character of the	substring must be <= pos; the
      remaining	characters may extend beyond pos. If found, the index
      of	the first  character of that matches substring is returned.
      If	not  found, npos	is returned.  Equality is defined by
      traits::eq().

   size_type
   rfind(const charT* s,	size_type pos,	size_type n) const;
   size_type
   rfind(const charT* s,	size_type pos =	npos) const;
   size_type
   rfind(charT c, size_type pos = npos) const;
      Searches for the last sequence of characters in this string
      matching a specified string.	The rfind variations return,
      respectively:

      rfind(basic_string(s,n), pos)
      rfind(basic_string(s), pos)
      rfind(basic_string(1, c), pos)

   basic_string&
   replace(size_type pos, size_type n1, const basic_string& s);
   basic_string&
   replace(size_type pos1, size_type n1,	const basic_string& str,
 	 size_type pos2, size_type n2);
   basic_string&
   replace(size_type pos, size_type n1, const charT* s,
 	 size_type n2);
   basic_string&
   replace(size_type pos, size_type n1, const charT* s);
   basic_string&
   replace(size_type pos, size_type n1, size_type n2, charT c);
      The replace function replaces selected elements of	this string
      with an alternate set of elements.	 All of	these versions insert
      the new elements in place of n1 elements in this string, starting
      at position	pos.  They each throw an	out_of_range
      exception if pos1 > size()and a length_error exception if the
      resulting string size exceeds max_size().

   The second	version	replaces elements of the original string with
   n2 characters	from string s starting at position pos2.  It  will
   throw	the out_of_range exception if pos2 > s.size().	 The  third
   variation of	the function replaces elements	in the original	string
   with n2 elements	from the array pointed to by s.	 The fourth
   version replaces elements in the string with elements from  the
   array pointed to by s, up to, but not including,	a
   traits::eos()	character.  The	fifth replaces n elements with n2
   repetitions of character c.

   basic_string&
   replace(iterator i1, iterator	i2,
 	 const basic_string& str);
   basic_string&
   replace(iterator i1, iterator	i2, const charT* s,
 	 size_type n);
   basic_string&
   replace(iterator i1, iterator	i2, const charT* s);
   basic_string&
   replace(iterator i1, iterator	i2, size_type n,
 	 charT c);
   template<class InputIterator>
   basic_string&
   replace(iterator  i1,	 iterator  i2,
 	 InputIterator j1, InputIterator j2);
      Replace selected elements of this string with an  alternative set
      of elements.  All of these versions	of  replace require
      iterators i1 and i2 to be valid iterators on this string.  The
      elements specified by the range [i1,i2)  are	replaced by
      the	new elements.

      The	first version shown here replaces with all members in
      str. The	second version starts at position i1, and  replaces
      the next n characters with n	characters of  the array
      pointed	to by s.  The third variation replaces  string
      elements with elements from	the array pointed to by	s up
      to, but not including, a traits::eos() character.	The fourth
      version replaces string elements with n repetitions	of c.
      The last	variation shown	here replaces  string elements with
      the members specified	in the range  [j1, j2).

   void
   reserve(size_type res_arg);
      Assures that the storage capacity is at least res_arg.

   void
   resize(size_type n, charT c);
   void
   resize(size_type n);
      Changes the capacity of this string to n.	If the new capacity is
      smaller than the current size of the string, then it is
      truncated.	  If the capacity is larger, then the string is	padded
      with c  characters. The latter	resize member pads the string
      with  default characters specified by  traits::eos().

   size type
   size() const;
      Return the	number of elements contained in	this string.

   basic_string
   substr(size_type pos = 0, size_type n	= npos)	const;
      Returns a string composed of copies of the	lesser of n and	size()
      characters in this string starting at index pos.  Throws an
      out_of_range exception if pos <= size().

   void
   swap(basic_string& s);
      Swaps the contents	of this	string with the	contents of s.

 NON-MEMBER OPERATORS

   template<class charT,	class traits, class Allocator>
   basic_string
   operator+(const basic_string&	lhs, const basic_string& rhs);
      Returns a string of length	lhs.size()  +  rhs.size(), where
      the first lhs.size()	elements are copies of the  elements
      of	lhs, and the next rhs.size()	elements are copies of
      the elements of rhs.

   template<class charT,	class traits, class Allocator>
   basic_string
   operator+(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   basic_string
   operator+(charT lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   basic_string
   operator+(const basic_string&	 lhs, const charT* rhs);
   template<class charT,	class traits, class Allocator>
   basic_string
   operator+(const basic_string&	lhs, charT rhs);
      Returns a string that represents the concatenation	of two
      string-like
      entities.	These functions	return,	respectively:

      basic_string(lhs) + rhs
      basic_string(1, lhs) + rhs
      lhs + basic_string(rhs)
      lhs + basic_string(1, rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator==(const basic_string& lhs, const basic_string& rhs);
      Returns a boolean value of	true if	lhs and	rhs are	equal,
      and false if they are not. Equality  is	defined	by the
      compare() member	function.

   template<class charT,	class traits, class Allocator>
   bool
   operator==(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator==(const basic_string& lhs, const charT* rhs);
      Returns a boolean value indicating	whether	lhs and	rhs are	equal.
      Equality is defined by the	compare()  member function.  These
      functions return, respectively:

      basic_string(lhs) == rhs
      lhs == basic_string(rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator!=(const basic_string& lhs,
 	    const basic_string&	rhs);
 	       Returns a boolean value representing the	inequality of lhs
                and rhs.  Inequality	is defined by the compare()
                member function.

   template<class charT,	class traits, class Allocator>
   bool
   operator!=(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator!=(const basic_string& lhs, const charT* rhs);
      Returns a boolean value representing the inequality of  lhs
      and rhs. Inequality	is defined by the compare()
      member function.  The functions return, respectively:

      basic_string(lhs) != rhs
      lhs != basic_string(rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator<(const basic_string&	lhs, const basic_string& rhs);
      Returns a boolean value representing the lexicographical
      less-than	relationship of lhs and rhs.  Less-than is defined
      by the compare() member.

   template<class charT,	class traits, class Allocator>
   bool
   operator<(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator<(const basic_string&	lhs, const charT* rhs);
      Returns a boolean value representing the lexicographical
      less-than	relationship of lhs and rhs.  Less-than is defined
      by the compare() member
      function.	These functions	return,	respectively:

      basic_string(lhs) < rhs
      lhs < basic_string(rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator>(const basic_string&	lhs, const basic_string& rhs);
      Returns a boolean value representing the lexicographical
      greater-than relationship of lhs and rhs.  Greater-than
      is defined by the compare() member function.

   template<class charT,	class traits, class Allocator>
   bool
   operator>(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator>(const basic_string&	lhs, const charT* rhs);
      Returns a boolean value representing the lexicographical
      greater-than relationship of lhs and rhs.  Greater-than
      is defined by the compare() member.  The functions return,
      respectively:

      basic_string(lhs) > rhs
      lhs > basic_string(rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator<=(const basic_string& lhs,
 	      const basic_string& rhs);
 		 Returns a boolean value representing the
                  lexicographical
 		 less-than-or-equal relationship of lhs	and rhs.
                  Less-than-or-equal is defined by	the compare()
                  member function.

   template<class charT,	class traits, class Allocator>
   bool
   operator<=(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator<=(const basic_string& lhs, const charT* rhs);
      Returns a boolean value representing the lexicographical
      less-than-or-equal relationship	of lhs and rhs.
      Less-than-or-equal is defined by the compare() member function.
      These functions return, respectively:

      basic_string(lhs) <= rhs
      lhs <= basic_string(rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator>=(const basic_string& lhs, const basic_string& rhs);
      Returns a boolean value representing the lexicographical
      greater-than-or-equal relationship of lhs and rhs.
      Greater-than-or-equal is defined by	the compare() member
      function.

   template<class charT,	class traits, class Allocator>
   bool
   operator>=(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator>=(const basic_string& lhs, const charT* rhs);
      Returns a boolean value representing the lexicographical
      greater-than-or-equal  relationship of lhs and rhs.
      Greater-than-or-equal is defined
      by	the compare() member.  The functions return, respectively:

      basic_string(lhs) >= rhs
      lhs >= basic_string(rhs)

   template <class charT, class traits, class Allocator>
   void swap(basic_string<charT,traits,Allocator>& a,
 	   basic_string<charT,traits,Allocator>& b);
 	      Swaps the	contents of a and b by calling a's swap	function on
 	      b.

   template<class charT,	class traits, class Allocator>
   istream&
   operator>>(istream& is, basic_string&	str);
      Reads str	from  is using traits::char_in until a
      traits::is_del()	element  is read.  All elements read,
      except the delimiter, are placed in
      str.  After the read, the function	returns	is.

   template<class charT,	class traits, class Allocator>
   ostream&
   operator<<(ostream& os, const	basic_string& str);
      Writes all	elements of str	to os in order from first to last, using
      traits::char_out().  After	the write, the function	returns	os.

 NON-MEMBER FUNCTION

   template <class Stream, class	charT, class traits,
 	   class Allocator>
   Stream&
   getline(Stream& is, basic_string& str, charT delim);
      An	unformatted input function that	extracts characters from is
      into str until npos	- 1 characters are read, the end of
      the	input sequence is reached, or the character read is
      delim.  The characters are read using traits::char_in().

 EXAMPLE

   //
   // string.cpp
   //
    #include<string>
    #include <iostream.h>

   int main()
    {
     string test;

      //Type in a string	over five characters long
     while(test.empty() ||  test.size() <= 5)
      {
       cout << "Type a string between 5 and 100 characters long.	"
 	    << endl;
       cin >> test;
      }

      //Test operator[] access
     cout << "Changing the third	character from " << test[2] <<
 	     " to * " << endl;
     test[2] = '*';
     cout << "now its: "	<< test	<< endl	<< endl;

      //Try the insertion member	function
     cout << "Identifying the middle: ";
     test.insert(test.size() / 2, "(the middle is here!)");
     cout << test << endl << endl;

      //Try replacement
     cout << "I didn't like the word 'middle',so	instead,I'll say:"
 		<< endl;
     test.replace(test.find("middle",0),	6, "center");
     cout << test << endl;

     return 0;
    }

   Output :
   Type a string	between	5 and 100 characters long.
   roguewave
   Changing the third character from g to *
   now its: ro*uewave
   Identifying the middle: ro*u(the middle is here!)ewave
   I didn't like	the word 'middle', so instead, I'll say:
   ro*u(the center is here!)ewave

 SEE ALSO

   Allocators, string, wstring

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  Additional Information (explode) :

  Close     Help