C++/String/string reverse

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

Print characters read from keyboard in reverse order

  
 
/* 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.
 */
#include <iostream>
#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
 */


Reverse a string in place.

  
#include <iostream>
#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;
  }
}


Reverse the order of all characters inside the string

  
 

#include <string>
#include <iostream>
#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
 */


Reversing an STL String

  
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main ()
{
   string strSample ("Hello String! ");
   cout << strSample << endl;
   reverse (strSample.begin (), strSample.end ());
   cout << strSample;
   return 0;
}


Reversing a String and Finding its Length

  
#include <algorithm>
#include <iostream>
#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";
}


Use a reverse iterator to display the string in reverse

  
#include <iostream>
#include <string>
#include <cctype>
#include <algorithm>
#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;
}