C++ Tutorial/string/string substr

Материал из C\C++ эксперт
Версия от 10:30, 25 мая 2010; Admin (обсуждение | вклад) (1 версия: Импорт контента...)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

finding substrings in string objects

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

Locating all instances of a substring

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

Split file name in command line into base name and extension

/* 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[])
{
    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;
    }
}

string member function substr

#include <iostream>
using std::cout;
using std::endl;
#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;
}
The substring of s1 starting at location 0 for
14 characters, s1.substr(0, 14), is:
AA1234567890as

substr "to-end-of-string" option

#include <iostream>
using std::cout;
using std::endl;
#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;
}
The substring of s1 starting at
location 5, s1.substr(5), is:
4567890asdfasdf