C++ Tutorial/string/string substr

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

finding substrings in string objects

<source lang="cpp">#include <iostream>

 #include <string>  
 using namespace std;  
   
 int main()  {  
    string s1 = "this is a test";  
    int n;  
   
    n = s1.find("test");  
    cout << n << endl;  
   
    return 0;  
 }</source>

Locating all instances of a substring

<source lang="cpp">#include <string>

  1. include <iostream>

int main () {

   using namespace std;
   string strSample ("Good day String!");
   size_t nOffset = strSample.find ("day", 0);
   size_t nSubstringOffset = strSample.find ("day", 0);
   while (nSubstringOffset != string::npos)
   {
       cout << "\"day\" found at offset " << nSubstringOffset << endl;
       // Make the "find" function search the next character onwards
       size_t nSearchOffset = nSubstringOffset + 1;
       nSubstringOffset = strSample.find ("day", nSearchOffset);
   }
   return 0;

}</source>

Split file name in command line into base name and extension

<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[]) {

   string filename, basename, extname, tmpname;
   const string suffix("tmp");
   /* for each command-line argument
    * (which is an ordinary C-string)
    */
   for (int i=1; i<argc; ++i) {
       // process argument as file name
       filename = argv[i];
       
       // search period in file name
       string::size_type idx = filename.find(".");
       if (idx == string::npos) {
           // file name does not contain any period
           tmpname = filename + "." + suffix;
       }
       else {
           /* split file name into base name and extension
            * - base name contains all characters before the period
            * - extension contains all characters after the period
            */
           basename = filename.substr(0, idx);
           extname = filename.substr(idx+1);
           if (extname.empty()) {
               // contains period but no extension: append tmp
               tmpname = filename;
               tmpname += suffix;
           }
           else if (extname == suffix) {
               // replace extension tmp with xxx
               tmpname = filename;
               tmpname.replace (idx+1, extname.size(), "xxx");
           }
           else {
               // replace any extension with tmp
               tmpname = filename;
               tmpname.replace (idx+1, string::npos, suffix);
           }
       }
       // print file name and temporary name
       cout << filename << " => " << tmpname << endl;
   }

}</source>

string member function substr

<source lang="cpp">#include <iostream> using std::cout; using std::endl;

  1. include <string>

using std::string; int main() {

  string s1( "AA1234567890asdfasdf" );
  string s2( " AAB" );
  string s3;
  // test string member function substr
  cout << "The substring of s1 starting at location 0 for\n"
     << "14 characters, s1.substr(0, 14), is:\n"
     << s1.substr( 0, 14 ) << "\n\n";
  return 0;

}</source>

The substring of s1 starting at location 0 for
14 characters, s1.substr(0, 14), is:
AA1234567890as

substr "to-end-of-string" option

<source lang="cpp">#include <iostream> using std::cout; using std::endl;

  1. include <string>

using std::string; int main() {

  string s1( "AA1234567890asdfasdf" );
  string s2( " AAB" );
  string s3;
  // test substr "to-end-of-string" option
  cout << "The substring of s1 starting at\n"
     << "location 5, s1.substr(5), is:\n"
     << s1.substr( 5 ) << endl; 
  return 0;

}</source>

The substring of s1 starting at
location 5, s1.substr(5), is:
4567890asdfasdf