C++/String/string reverse

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Print characters read from keyboard in reverse order

<source lang="cpp">

/* The following code example is taken from the book

* "The C++ Standard Library - A Tutorial and Reference"
* by Nicolai M. Josuttis, Addison-Wesley, 1999
*
* (C) Copyright Nicolai M. Josuttis 1999.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
  1. include <iostream>
  2. include <string>

using namespace std; int main (int argc, char** argv) {

  const string delims(" \t,.;");
  string line;
  // for every line read successfully
  while (getline(cin,line)) {
      string::size_type begIdx, endIdx;
      // search beginning of the first word
      begIdx = line.find_first_not_of(delims);
      // while beginning of a word found
      while (begIdx != string::npos) {
          // search end of the actual word
          endIdx = line.find_first_of (delims, begIdx);
          if (endIdx == string::npos) {
              // end of word is end of line
              endIdx = line.length();
          }
          // print characters in reverse order
          for (int i=endIdx-1; i>=static_cast<int>(begIdx); --i) {
              cout << line[i];
          }
          cout << " ";
          // search beginning of the next word
          begIdx = line.find_first_not_of (delims, endIdx);
      }
      cout << endl;
  }

} /* asdf; asdf; fdsa fdsa asdf fdsa asdf fdsa


Terminate batch job (Y/N)? n

*/        
   
 </source>


Reverse a string in place.

<source lang="cpp">

  1. include <iostream>
  2. include <cstring>

using namespace std; void revstr(char *str); int main() {

 char str[] = "abcdefghijklmnopqrstuvwxyz";
 cout << "Original string: " << str << endl;
 revstr(str);
 cout << "Reversed string: " << str << endl;
 return 0;

} // Reverse a string in place. void revstr(char *str) {

 int i, j;
 char t;
 for(i = 0, j = strlen(str)-1; i < j; ++i, --j) {
   t = str[i];
   str[i] = str[j];
   str[j] = t;
 }

}


 </source>


Reverse the order of all characters inside the string

<source lang="cpp">


  1. include <string>
  2. include <iostream>
  3. include <algorithm>

using namespace std; int main() {

   const string hello("Hello, how are you?");
   string s(hello.begin(),hello.end());
   // iterate through all of the characters
   string::iterator pos;
   for (pos = s.begin(); pos != s.end(); ++pos) {
       cout << *pos;
   }
   cout << endl;
   
   reverse (s.begin(), s.end());
   cout << "reverse:       " << s << endl;

} /* Hello, how are you? reverse:  ?uoy era woh ,olleH

*/        
   
 </source>


Reversing an STL String

<source lang="cpp">

  1. include <string>
  2. include <iostream>
  3. include <algorithm>

using namespace std; int main () {

  string strSample ("Hello String! ");
  cout << strSample << endl;
  reverse (strSample.begin (), strSample.end ());
  cout << strSample;
  return 0;

}


 </source>


Reversing a String and Finding its Length

<source lang="cpp">

  1. include <algorithm>
  2. include <iostream>
  3. include <string>

using namespace std; int main( ) {

  string adage( "this is a test" );
  cout << adage;
  cout << adage.length() << " letters";
  // equivalent of strrev()
  reverse( adage.begin(), adage.end() );
  cout << "\n\nReversed string: " << adage;
  cout << "\nThe reversed string has " << adage.length() << " letters";

}


 </source>


Use a reverse iterator to display the string in reverse

<source lang="cpp">

  1. include <iostream>
  2. include <string>
  3. include <cctype>
  4. include <algorithm>
  5. include <vector>

using namespace std; int main() {

 string strA("This is a test.");
 string::reverse_iterator ritr;
 for(ritr = strA.rbegin(); ritr != strA.rend(); ++ritr)
   cout << *ritr;
 return 0;

}


 </source>