程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [C++STDLib基礎]關於C++string字符串的操作——C++標准庫頭文件<string&

[C++STDLib基礎]關於C++string字符串的操作——C++標准庫頭文件<string&

編輯:C++入門知識

[cpp]  #include <conio.h>   
#include <iostream>  
#include <string>  
using namespace std;  
//1.構造函數  
/*
string();
string( size_type length, char ch );
string( const char *str );
string( const char *str, size_type index );
string( string &str, size_type index, size_type length );
string( input_iterator start, input_iterator end );
字符串的構造函數創建一個新字符串,包括: 
1.以length為長度的ch的拷貝(即length個ch) 
2.以str為初值 (長度任意), 
3.以index為索引開始的子串,長度為length,或者 
4.以從start到end的元素為初值.
*/ 
void test0() 
{    
    string str1(5,'c'); 
    string str2("Now is the time..."); 
    string str3(str2,5); 
    string str4(str2,1,4); 
    cout<<str1<<endl;//ccccc  
    cout<<str2<<endl;//Now is the time...  
    cout<<str3<<endl;//s the time...  
    cout<<str4<<endl;//ow i  
}  
//2.操作符  
/*
1.用==, >, <, >=, <=, and !=比較字符串,compare()
2.用 + 或者 += 操作符連接兩個字符串
3.用[]獲取特定的字符-->at()
A.compare()
int compare( const basic_string &str );
int compare( const char *str );
int compare( size_type index, size_type length, const basic_string &str );
int compare( size_type index, size_type length, const basic_string &str, size_type index2,
size_type length2 );
int compare( size_type index, size_type length, const char *str, size_type length2 );
返回值 情況 :小於零 this < str ;零 this == str ;大於零 this > str 
不同的函數: 
1.比較自己和str, 
2.比較自己的子串和str,子串以index索引開始,長度為length 
3.比較自己的子串和str的子串,其中index2和length2引用str,index和length引用自己 
4.比較自己的子串和str的子串,其中str的子串以索引0開始,長度為length2,自己的子串以index開始,長度為length 
*/ 
void test1() 
{     
    string str1("hello");  
    cout<<str1[1]<<"  "<<str1.at(4)<<endl;//e o //注意下標不要出界,否則會崩潰  
}  
//添加文本 append();賦值assign()  
/*
basic_string &append( const basic_string &str );
basic_string &append( const char *str );
basic_string &append( const basic_string &str, size_type index, size_type len );
basic_string &append( const char *str, size_type num );
basic_string &append( size_type num, char ch );
append() 函數可以完成以下工作: 
1.在字符串的末尾添加str, 
2.在字符串的末尾添加str的子串,子串以index索引開始,長度為len 
3.在字符串的末尾添加str中的num個字符, 
4.在字符串的末尾添加num個字符ch, 
5.在字符串的末尾添加以迭代器start和end表示的字符序列. 
 
B==》與append()完全相同。
basic_string &assign( const basic_string &str );
basic_string &assign( const char *str );
basic_string &assign( const char *str, size_type num );
basic_string &assign( const basic_string &str, size_type index, size_type len );
basic_string &assign( size_type num, char ch );
*/ 
void test2() 
{     
    string str1=("hello"); 
    str1.append(" "); 
    char* ch="world"; 
    str1.append(ch); 
    str1.append(3,'!'); 
    string str2="ni hai hao ma?????"; 
    str1.append(str2,0,str2.length()-4); 
    str1.append("veryGood!!!",5); 
    cout<<str1<<endl;//hello world!!!ni hai hao ma?veryG  
 
    string str4, str3 = "War and Peace"; 
    str4.assign( str3, 4, 3 );   
    cout << str4 << endl;//and  
}  
//查找find(),find_first_of(), find_first_not_of(),find_last_of(),find_last_not_of(),rfind()  
/*
size_type find( const basic_string &str, size_type index );
size_type find( const char *str, size_type index );
size_type find( const char *str, size_type index, size_type length );
size_type find( char ch, size_type index );
find()函數: 
1.返回str在字符串中第一次出現的位置(從index開始查找)。如果沒找到則返回string::npos, 
2.返回str在字符串中第一次出現的位置(從index開始查找,長度為length)。如果沒找到就返回string::npos, 
3.返回字符ch在字符串中第一次出現的位置(從index開始查找)。如果沒找到就返回string::npos
 
find_first_of()函數: 
1.查找在字符串中第一個與str中的某個字符匹配的字符,返回它的位置。搜索從index開始,如果沒找到就返回string::npos 
 size_type find_first_of( const char *str, size_type index, size_type num );
2.查找在字符串中第一個與str中的某個字符匹配的字符,返回它的位置。搜索從index開始,最多搜索num個字符。如果沒找到就返回string::npos, 
3.查找在字符串中第一個與ch匹配的字符,返回它的位置。搜索從index開始。 
 
find_first_not_of()函數: 
1.在字符串中查找第一個與str中的字符都不匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops 
size_type find_first_not_of( const char *str, size_type index, size_type num );
2.在字符串中查找第一個與str中的字符都不匹配的字符,返回它的位置。搜索從index開始,最多查找num個字符。如果沒找到就返回string::nops 
3.在字符串中查找第一個與ch不匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops 
 
find_last_of()函數: 
1.在字符串中查找最後一個與str中的某個字符匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops 
 size_type find_last_of( const char *str, size_type index, size_type num );
2.在字符串中查找最後一個與str中的某個字符匹配的字符,返回它的位置。搜索從index開始,最多搜索num個字符。如果沒找到就返回string::nops 
3.在字符串中查找最後一個與ch匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops 
 
find_last_not_of()函數: 
1.在字符串中查找最後一個與str中的字符都不匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops 
 size_type find_last_not_of( const char *str, size_type index, size_type num );
2.在字符串中查找最後一個與str中的字符都不匹配的字符,返回它的位置。搜索從index開始,最多查找num個字符如果沒找到就返回string::nops 
3.在字符串中查找最後一個與ch不匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops 
 
size_type rfind( const basic_string &str, size_type index );
size_type rfind( const char *str, size_type index );
size_type rfind( const char *str, size_type index, size_type num );
size_type rfind( char ch, size_type index );
rfind()函數: (逆向查找)
1.返回最後一個與str中的某個字符匹配的字符,從index開始查找。如果沒找到就返回string::npos 
2.返回最後一個與str中的某個字符匹配的字符,從index開始查找,最多查找num個字符。如果沒找到就返回string::npos 
3.返回最後一個與ch匹配的字符,從index開始查找。如果沒找到就返回string::npos 
*/ 
void test3() 
{   
    string str1( "Alpha Beta Gamma Delta" ); 
    unsigned int loc = str1.find( "Omega", 0 ); 
    if( loc != string::npos ) 
        cout << "Found Omega at " << loc << endl; 
    else 
        cout << "Didn't find Omega" << endl; 
 
/*  例如,在下列代碼中第一次調用rfind()返回string::npos,因為目標詞語不在開始的8個字符中。然而,第二次調用返回9,因為目標詞語在開始的20個字符之中。 */ 
    int loc2; 
    string s = "My cat's breath smells like cat food."; 
    loc2 = s.rfind( "breath", 8 ); 
    cout << "The word breath is at index " << loc2 << endl;//-1  
    loc2 = s.rfind( "breath", 20 ); 
    cout << "The word breath is at index " << loc2 << endl;//9  
}   
//插入(insert),替換(replace)   
/*
iterator insert( iterator i, const char &ch );
basic_string &insert( size_type index, const basic_string &str );
basic_string &insert( size_type index, const char *str );
basic_string &insert( size_type index1, const basic_string &str, size_type index2, size_type num );
basic_string &insert( size_type index, const char *str, size_type num );
basic_string &insert( size_type index, size_type num, char ch );
void insert( iterator i, size_type num, const char &ch );
void insert( iterator i, iterator start, iterator end );
insert()函數的功能非常多: 
1.在迭代器i表示的位置前面插入一個字符ch, 
2.在字符串的位置index插入字符串str, 
3.在字符串的位置index插入字符串str的子串(從index2開始,長num個字符), 
4.在字符串的位置index插入字符串str的num個字符, 
5.在字符串的位置index插入num個字符ch的拷貝, 
6.在迭代器i表示的位置前面插入num個字符ch的拷貝, 
7.在迭代器i表示的位置前面插入一段字符,從start開始,以end結束. 
 
basic_string &replace( size_type index, size_type num, const basic_string &str );
basic_string &replace( size_type index1, size_type num1, const basic_string &str, size_type index2,
size_type num2 );
basic_string &replace( size_type index, size_type num, const char *str );
basic_string &replace( size_type index, size_type num1, const char *str, size_type num2 );
basic_string &replace( size_type index, size_type num1, size_type num2, char ch );
basic_string &replace( iterator start, iterator end, const basic_string &str );
basic_string &replace( iterator start, iterator end, const char *str );
basic_string &replace( iterator start, iterator end, const char *str, size_type num );
basic_string &replace( iterator start, iterator end, size_type num, char ch );
replace()函數: 
1.用str中的num個字符替換本字符串中的字符,從index開始 
2.用str中的num2個字符(從index2開始)替換本字符串中的字符,從index1開始,最多num1個字符 
3.用str中的num個字符(從index開始)替換本字符串中的字符 
4.用str中的num2個字符(從index2開始)替換本字符串中的字符,從index1開始,num1個字符 
5.用num2個ch字符替換本字符串中的字符,從index開始 
6.用str中的字符替換本字符串中的字符,迭代器start和end指示范圍 
7.用str中的num個字符替換本字符串中的內容,迭代器start和end指示范圍, 
8.用num個ch字符替換本字符串中的內容,迭代器start和end指示范圍. 
*/ 
void test4() 
{    
    string s = "They say he carved it himself...from a BIGGER spoon"; 
    string s2 = "find your Homer."; 
    s.replace( 32, s2.length(), s2 ); 
    cout << s << endl;   //They say he carved it himself...find your Homer.oon  
}   
//其他  
/*
交換(swap)  void swap( basic_string &str );//把str和本字符串交換
 
basic_string substr( size_type index, size_type num = npos );
substr()返回本字符串的一個子串,從index開始,長num個字符。如果沒有指定,將是默認值 string::npos。這樣,substr()函數將簡單的返回從index開始的剩余的字符串。
 
size_type size();//size()函數返回字符串中現在擁有的字符數。
size_type length();//length()函數返回字符串的長度. 這個數字應該和size()返回的數字相同.
 
void clear();//清空
bool empty();//如果字符串為空則empty()返回真(true),否則返回假(false).
 
const char *data();//data()函數返回指向自己的第一個字符的指針.
const char *c_str();//c_str()函數返回一個指向正規C字符串的指針, 內容與本字符串相同. 
*/ 
void test5() 
{    
    string first( "This comes first" ); 
    string second( "And this is second" ); 
    first.swap( second ); 
    cout << first << endl;//And this is second  
    cout << second << endl;//This comes first  
 
    string s("What we have here is a failure to communicate"); 
    string sub = s.substr(5);  
    cout << sub << endl;//we have here is a failure to communicate  
 
    cout<<"sub size:"<<sub.size()<<"  len:"<<sub.length()<<endl;//40 40  
         
    sub.clear();//<==>sub="";  
    cout<<sub.empty()<<endl;//1    
}  
//C++11  
//轉換成 int;float;double;long;long long;long double;unsigned long;unsigned long long;  
//stoi(),stof(),stod(),stold(),stol(),stoll(),stoul(),stoull(),  
void test6() 
{     
    const char *str1 = " 42"; 
    const char *str2 = "3.14159"; 
    const char *str3 = "31337 with words";  
    std::cout << "std::stoi(\"" << str1 << "\") is " << std::stoi(str1) << '\n';//42  
    std::cout << "std::stoi(\"" << str2 << "\") is " << std::stoi(str2) << '\n';//3  
    std::cout << "std::stoi(\"" << str3 << "\") is " << std::stoi(str3) << '\n';//31337   
 
    std::cout << "std::stof(\"" << str1 << "\") is " << std::stof(str1,NULL) << '\n';//42  
    std::cout << "std::stof(\"" << str2 << "\") is " << std::stof(str2) << '\n';//3.14159  
    std::cout << "std::stof(\"" << str3 << "\") is " << std::stof(str3) << '\n';//31337   
 
    std::cout << "std::stod(\"" << str1 << "\") is " << std::stod(str1) << '\n';//42  
    std::cout << "std::stod(\"" << str2 << "\") is " << std::stod(str2,NULL) << '\n';//3.14159  
    std::cout << "std::stod(\"" << str3 << "\") is " << std::stod(str3) << '\n';//31337   
     
    std::cout << "std::stold(\"" << str1 << "\") is " << std::stold(str1) << '\n';//42  
    std::cout << "std::stold(\"" << str2 << "\") is " << std::stold(str2) << '\n';//3.14159  
    std::cout << "std::stold(\"" << str3 << "\") is " << std::stold(str3,NULL) << '\n';//31337   
     
    string s1 = "-8246821";//十進制(默認)   
    string s2 = "-0xffff"; //十六進制  
    string s3 = "-020";  //八進制  
    string s4 = "11111110";//是十進制,若要二進制則:stol(s4,NULL,2)  
    //long  就是 int的加長版,而不是float的加長版  
    cout<<"stol("<<s1<<"( ="<<stol(s1,NULL,0)<<" = "<<stol(s1,NULL,10)<<endl;//-8246821   
    cout<<"stol("<<s2<<"( ="<<stol(s2,NULL,0)<<" = "<<stol(s2,NULL,16)<<endl;//-65535 若是stoll(s2)則=0;會自動識別進制  
    cout<<"stol("<<s3<<"( ="<<stol(s3,NULL,0)<<" = "<<stol(s3,NULL,8)<<endl;//-16  若是stoll(s3)則=0 ;會自動識別進制  
    cout<<"stol("<<s4<<"( ="<<stol(s4,NULL,0)<<" || "<<stol(s4,NULL,2)<<endl;//11111110    ||   254     
 
    cout<<"stoul("<<s1<<"( ="<<stoul(s1,NULL,0)<<" = "<<stoul(s1,NULL,10)<<endl;//返回一個正的10位的大數據  
    cout<<"stoul("<<s2<<"( ="<<stoul(s2,NULL,0)<<" = "<<stoul(s2,NULL,16)<<endl;//  
    cout<<"stoul("<<s3<<"( ="<<stoul(s3,NULL,0)<<" = "<<stoul(s3,NULL,8)<<endl;//  
    cout<<"stoul("<<s4<<"( ="<<stoul("10.32",NULL,0)<<" || "<<stoul(s4,NULL,2)<<endl;//10 || 254     
 
    cout<<"stoll("<<s1<<"( ="<<stoll(s1,NULL,0)<<endl;//-8246821   
    cout<<"stoll("<<s2<<"( ="<<stoll(s2,NULL,0)<<endl;//-65535 若是stoll(s2)則=0;會自動識別進制  
    cout<<"stoll("<<s3<<"( ="<<stoll(s3,NULL,0)<<endl;//-16  若是stoll(s3)則=0 ;會自動識別進制  
    cout<<"stoll("<<s4<<"( ="<<stoll(s4,NULL,0)<<endl;//11111110     
 
    cout<<"stoull("<<s1<<"( ="<<stoull(s1,NULL,0)<<endl;//如字符串是負數,則會返回一個正的20位的大數據  
    cout<<"stoull("<<s2<<"( ="<<stoull(s2,NULL,0)<<endl;//  
    cout<<"stoull("<<s3<<"( ="<<stoull(s3,NULL,0)<<endl;//  
    cout<<"stoull("<<stoull(s3,NULL,0)<<"( ="<<stoull(to_string(stoull(s3,NULL,0)),NULL,0)<<endl;//18446744073709551600  
}  
//C++11  
//num to string/wstring :to_string(),to_wstring()  
void test7() 

    long double f=3.1415926; 
    std::wstring wpi = L"pi is " + std::to_wstring(f); 
    wstring wperfect = std::to_wstring(_ULonglong(1+2+4+7+14)) + L" is a perfect number"; 
    wcout << wpi << L'\n';//3.14159  
    wcout << wperfect << L'\n';//28  
 
    std::string pi = "pi is " + std::to_string(f); 
    string perfect = std::to_string(long long(1+2+4+7+14)) + " is a perfect number"; 
    cout << pi << endl;//3.14159  
    cout << perfect << endl;//28  

void Test(char h) 

    cout<<"press key===="<<h<<endl; 
    switch(h) 
    {  
    case '0':  test0();break; 
    case '1':  test1();break; 
    case '2':  test2();break; 
    case '3':  test3();break; 
    case '4':  test4();break; 
    case '5':  test5();break;  
    case '6':  test6();break;  
    case '7':  test7();break;  
    case 27: 
    case 'q':exit(0);break;  
    default:cout<<"default "<<h<<endl;break; 
    } 

void main() 

    while(1) 
    { 
        Test(getch()); 
    }  
}  

#include <conio.h>
#include <iostream>
#include <string>
using namespace std;
//1.構造函數
/*
string();
string( size_type length, char ch );
string( const char *str );
string( const char *str, size_type index );
string( string &str, size_type index, size_type length );
string( input_iterator start, input_iterator end );
字符串的構造函數創建一個新字符串,包括:
1.以length為長度的ch的拷貝(即length個ch)
2.以str為初值 (長度任意),
3.以index為索引開始的子串,長度為length,或者
4.以從start到end的元素為初值.
*/
void test0()
{  
 string str1(5,'c');
 string str2("Now is the time...");
 string str3(str2,5);
 string str4(str2,1,4);
 cout<<str1<<endl;//ccccc
 cout<<str2<<endl;//Now is the time...
 cout<<str3<<endl;//s the time...
 cout<<str4<<endl;//ow i
}
//2.操作符
/*
1.用==, >, <, >=, <=, and !=比較字符串,compare()
2.用 + 或者 += 操作符連接兩個字符串
3.用[]獲取特定的字符-->at()
A.compare()
int compare( const basic_string &str );
int compare( const char *str );
int compare( size_type index, size_type length, const basic_string &str );
int compare( size_type index, size_type length, const basic_string &str, size_type index2,
size_type length2 );
int compare( size_type index, size_type length, const char *str, size_type length2 );
返回值 情況 :小於零 this < str ;零 this == str ;大於零 this > str
不同的函數:
1.比較自己和str,
2.比較自己的子串和str,子串以index索引開始,長度為length
3.比較自己的子串和str的子串,其中index2和length2引用str,index和length引用自己
4.比較自己的子串和str的子串,其中str的子串以索引0開始,長度為length2,自己的子串以index開始,長度為length
*/
void test1()
{  
 string str1("hello");
 cout<<str1[1]<<"  "<<str1.at(4)<<endl;//e o //注意下標不要出界,否則會崩潰
}
//添加文本 append();賦值assign()
/*
basic_string &append( const basic_string &str );
basic_string &append( const char *str );
basic_string &append( const basic_string &str, size_type index, size_type len );
basic_string &append( const char *str, size_type num );
basic_string &append( size_type num, char ch );
append() 函數可以完成以下工作:
1.在字符串的末尾添加str,
2.在字符串的末尾添加str的子串,子串以index索引開始,長度為len
3.在字符串的末尾添加str中的num個字符,
4.在字符串的末尾添加num個字符ch,
5.在字符串的末尾添加以迭代器start和end表示的字符序列.

B==》與append()完全相同。
basic_string &assign( const basic_string &str );
basic_string &assign( const char *str );
basic_string &assign( const char *str, size_type num );
basic_string &assign( const basic_string &str, size_type index, size_type len );
basic_string &assign( size_type num, char ch );
*/
void test2()
{   
 string str1=("hello");
 str1.append(" ");
 char* ch="world";
 str1.append(ch);
 str1.append(3,'!');
 string str2="ni hai hao ma?????";
 str1.append(str2,0,str2.length()-4);
 str1.append("veryGood!!!",5);
 cout<<str1<<endl;//hello world!!!ni hai hao ma?veryG

 string str4, str3 = "War and Peace";
 str4.assign( str3, 4, 3 ); 
 cout << str4 << endl;//and
}
//查找find(),find_first_of(), find_first_not_of(),find_last_of(),find_last_not_of(),rfind()
/*
size_type find( const basic_string &str, size_type index );
size_type find( const char *str, size_type index );
size_type find( const char *str, size_type index, size_type length );
size_type find( char ch, size_type index );
find()函數:
1.返回str在字符串中第一次出現的位置(從index開始查找)。如果沒找到則返回string::npos,
2.返回str在字符串中第一次出現的位置(從index開始查找,長度為length)。如果沒找到就返回string::npos,
3.返回字符ch在字符串中第一次出現的位置(從index開始查找)。如果沒找到就返回string::npos

find_first_of()函數:
1.查找在字符串中第一個與str中的某個字符匹配的字符,返回它的位置。搜索從index開始,如果沒找到就返回string::npos
 size_type find_first_of( const char *str, size_type index, size_type num );
2.查找在字符串中第一個與str中的某個字符匹配的字符,返回它的位置。搜索從index開始,最多搜索num個字符。如果沒找到就返回string::npos,
3.查找在字符串中第一個與ch匹配的字符,返回它的位置。搜索從index開始。

find_first_not_of()函數:
1.在字符串中查找第一個與str中的字符都不匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops
size_type find_first_not_of( const char *str, size_type index, size_type num );
2.在字符串中查找第一個與str中的字符都不匹配的字符,返回它的位置。搜索從index開始,最多查找num個字符。如果沒找到就返回string::nops
3.在字符串中查找第一個與ch不匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops

find_last_of()函數:
1.在字符串中查找最後一個與str中的某個字符匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops
 size_type find_last_of( const char *str, size_type index, size_type num );
2.在字符串中查找最後一個與str中的某個字符匹配的字符,返回它的位置。搜索從index開始,最多搜索num個字符。如果沒找到就返回string::nops
3.在字符串中查找最後一個與ch匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops

find_last_not_of()函數:
1.在字符串中查找最後一個與str中的字符都不匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops
 size_type find_last_not_of( const char *str, size_type index, size_type num );
2.在字符串中查找最後一個與str中的字符都不匹配的字符,返回它的位置。搜索從index開始,最多查找num個字符如果沒找到就返回string::nops
3.在字符串中查找最後一個與ch不匹配的字符,返回它的位置。搜索從index開始。如果沒找到就返回string::nops
 
size_type rfind( const basic_string &str, size_type index );
size_type rfind( const char *str, size_type index );
size_type rfind( const char *str, size_type index, size_type num );
size_type rfind( char ch, size_type index );
rfind()函數: (逆向查找)
1.返回最後一個與str中的某個字符匹配的字符,從index開始查找。如果沒找到就返回string::npos
2.返回最後一個與str中的某個字符匹配的字符,從index開始查找,最多查找num個字符。如果沒找到就返回string::npos
3.返回最後一個與ch匹配的字符,從index開始查找。如果沒找到就返回string::npos
*/
void test3()

 string str1( "Alpha Beta Gamma Delta" );
 unsigned int loc = str1.find( "Omega", 0 );
 if( loc != string::npos )
  cout << "Found Omega at " << loc << endl;
 else
  cout << "Didn't find Omega" << endl;

/* 例如,在下列代碼中第一次調用rfind()返回string::npos,因為目標詞語不在開始的8個字符中。然而,第二次調用返回9,因為目標詞語在開始的20個字符之中。 */
 int loc2;
 string s = "My cat's breath smells like cat food.";
 loc2 = s.rfind( "breath", 8 );
 cout << "The word breath is at index " << loc2 << endl;//-1
 loc2 = s.rfind( "breath", 20 );
 cout << "The word breath is at index " << loc2 << endl;//9

//插入(insert),替換(replace)
/*
iterator insert( iterator i, const char &ch );
basic_string &insert( size_type index, const basic_string &str );
basic_string &insert( size_type index, const char *str );
basic_string &insert( size_type index1, const basic_string &str, size_type index2, size_type num );
basic_string &insert( size_type index, const char *str, size_type num );
basic_string &insert( size_type index, size_type num, char ch );
void insert( iterator i, size_type num, const char &ch );
void insert( iterator i, iterator start, iterator end );
insert()函數的功能非常多:
1.在迭代器i表示的位置前面插入一個字符ch,
2.在字符串的位置index插入字符串str,
3.在字符串的位置index插入字符串str的子串(從index2開始,長num個字符),
4.在字符串的位置index插入字符串str的num個字符,
5.在字符串的位置index插入num個字符ch的拷貝,
6.在迭代器i表示的位置前面插入num個字符ch的拷貝,
7.在迭代器i表示的位置前面插入一段字符,從start開始,以end結束.

basic_string &replace( size_type index, size_type num, const basic_string &str );
basic_string &replace( size_type index1, size_type num1, const basic_string &str, size_type index2,
size_type num2 );
basic_string &replace( size_type index, size_type num, const char *str );
basic_string &replace( size_type index, size_type num1, const char *str, size_type num2 );
basic_string &replace( size_type index, size_type num1, size_type num2, char ch );
basic_string &replace( iterator start, iterator end, const basic_string &str );
basic_string &replace( iterator start, iterator end, const char *str );
basic_string &replace( iterator start, iterator end, const char *str, size_type num );
basic_string &replace( iterator start, iterator end, size_type num, char ch );
replace()函數:
1.用str中的num個字符替換本字符串中的字符,從index開始
2.用str中的num2個字符(從index2開始)替換本字符串中的字符,從index1開始,最多num1個字符
3.用str中的num個字符(從index開始)替換本字符串中的字符
4.用str中的num2個字符(從index2開始)替換本字符串中的字符,從index1開始,num1個字符
5.用num2個ch字符替換本字符串中的字符,從index開始
6.用str中的字符替換本字符串中的字符,迭代器start和end指示范圍
7.用str中的num個字符替換本字符串中的內容,迭代器start和end指示范圍,
8.用num個ch字符替換本字符串中的內容,迭代器start和end指示范圍.
*/
void test4()
{  
 string s = "They say he carved it himself...from a BIGGER spoon";
 string s2 = "find your Homer.";
 s.replace( 32, s2.length(), s2 );
 cout << s << endl;   //They say he carved it himself...find your Homer.oon

//其他
/*
交換(swap)  void swap( basic_string &str );//把str和本字符串交換
 
basic_string substr( size_type index, size_type num = npos );
substr()返回本字符串的一個子串,從index開始,長num個字符。如果沒有指定,將是默認值 string::npos。這樣,substr()函數將簡單的返回從index開始的剩余的字符串。

size_type size();//size()函數返回字符串中現在擁有的字符數。
size_type length();//length()函數返回字符串的長度. 這個數字應該和size()返回的數字相同.

void clear();//清空
bool empty();//如果字符串為空則empty()返回真(true),否則返回假(false).

const char *data();//data()函數返回指向自己的第一個字符的指針.
const char *c_str();//c_str()函數返回一個指向正規C字符串的指針, 內容與本字符串相同.
*/
void test5()
{  
 string first( "This comes first" );
 string second( "And this is second" );
 first.swap( second );
 cout << first << endl;//And this is second
 cout << second << endl;//This comes first

 string s("What we have here is a failure to communicate");
 string sub = s.substr(5);
 cout << sub << endl;//we have here is a failure to communicate

 cout<<"sub size:"<<sub.size()<<"  len:"<<sub.length()<<endl;//40 40
  
 sub.clear();//<==>sub="";
 cout<<sub.empty()<<endl;//1 
}
//C++11
//轉換成 int;float;double;long;long long;long double;unsigned long;unsigned long long;
//stoi(),stof(),stod(),stold(),stol(),stoll(),stoul(),stoull(),
void test6()
{   
 const char *str1 = " 42";
 const char *str2 = "3.14159";
 const char *str3 = "31337 with words";
 std::cout << "std::stoi(\"" << str1 << "\") is " << std::stoi(str1) << '\n';//42
 std::cout << "std::stoi(\"" << str2 << "\") is " << std::stoi(str2) << '\n';//3
 std::cout << "std::stoi(\"" << str3 << "\") is " << std::stoi(str3) << '\n';//31337

 std::cout << "std::stof(\"" << str1 << "\") is " << std::stof(str1,NULL) << '\n';//42
 std::cout << "std::stof(\"" << str2 << "\") is " << std::stof(str2) << '\n';//3.14159
 std::cout << "std::stof(\"" << str3 << "\") is " << std::stof(str3) << '\n';//31337

 std::cout << "std::stod(\"" << str1 << "\") is " << std::stod(str1) << '\n';//42
 std::cout << "std::stod(\"" << str2 << "\") is " << std::stod(str2,NULL) << '\n';//3.14159
 std::cout << "std::stod(\"" << str3 << "\") is " << std::stod(str3) << '\n';//31337
 
 std::cout << "std::stold(\"" << str1 << "\") is " << std::stold(str1) << '\n';//42
 std::cout << "std::stold(\"" << str2 << "\") is " << std::stold(str2) << '\n';//3.14159
 std::cout << "std::stold(\"" << str3 << "\") is " << std::stold(str3,NULL) << '\n';//31337
 
 string s1 = "-8246821";//十進制(默認)
 string s2 = "-0xffff"; //十六進制
 string s3 = "-020";  //八進制
 string s4 = "11111110";//是十進制,若要二進制則:stol(s4,NULL,2)
 //long  就是 int的加長版,而不是float的加長版
 cout<<"stol("<<s1<<"( ="<<stol(s1,NULL,0)<<" = "<<stol(s1,NULL,10)<<endl;//-8246821
 cout<<"stol("<<s2<<"( ="<<stol(s2,NULL,0)<<" = "<<stol(s2,NULL,16)<<endl;//-65535 若是stoll(s2)則=0;會自動識別進制
 cout<<"stol("<<s3<<"( ="<<stol(s3,NULL,0)<<" = "<<stol(s3,NULL,8)<<endl;//-16  若是stoll(s3)則=0 ;會自動識別進制
 cout<<"stol("<<s4<<"( ="<<stol(s4,NULL,0)<<" || "<<stol(s4,NULL,2)<<endl;//11111110    ||   254  

 cout<<"stoul("<<s1<<"( ="<<stoul(s1,NULL,0)<<" = "<<stoul(s1,NULL,10)<<endl;//返回一個正的10位的大數據
 cout<<"stoul("<<s2<<"( ="<<stoul(s2,NULL,0)<<" = "<<stoul(s2,NULL,16)<<endl;//
 cout<<"stoul("<<s3<<"( ="<<stoul(s3,NULL,0)<<" = "<<stoul(s3,NULL,8)<<endl;//
 cout<<"stoul("<<s4<<"( ="<<stoul("10.32",NULL,0)<<" || "<<stoul(s4,NULL,2)<<endl;//10 || 254  

 cout<<"stoll("<<s1<<"( ="<<stoll(s1,NULL,0)<<endl;//-8246821
 cout<<"stoll("<<s2<<"( ="<<stoll(s2,NULL,0)<<endl;//-65535 若是stoll(s2)則=0;會自動識別進制
 cout<<"stoll("<<s3<<"( ="<<stoll(s3,NULL,0)<<endl;//-16  若是stoll(s3)則=0 ;會自動識別進制
 cout<<"stoll("<<s4<<"( ="<<stoll(s4,NULL,0)<<endl;//11111110  

 cout<<"stoull("<<s1<<"( ="<<stoull(s1,NULL,0)<<endl;//如字符串是負數,則會返回一個正的20位的大數據
 cout<<"stoull("<<s2<<"( ="<<stoull(s2,NULL,0)<<endl;//
 cout<<"stoull("<<s3<<"( ="<<stoull(s3,NULL,0)<<endl;//
 cout<<"stoull("<<stoull(s3,NULL,0)<<"( ="<<stoull(to_string(stoull(s3,NULL,0)),NULL,0)<<endl;//18446744073709551600
}
//C++11
//num to string/wstring :to_string(),to_wstring()
void test7()
{
 long double f=3.1415926;
 std::wstring wpi = L"pi is " + std::to_wstring(f);
 wstring wperfect = std::to_wstring(_ULonglong(1+2+4+7+14)) + L" is a perfect number";
 wcout << wpi << L'\n';//3.14159
 wcout << wperfect << L'\n';//28

 std::string pi = "pi is " + std::to_string(f);
 string perfect = std::to_string(long long(1+2+4+7+14)) + " is a perfect number";
 cout << pi << endl;//3.14159
 cout << perfect << endl;//28
}
void Test(char h)
{
 cout<<"press key===="<<h<<endl;
 switch(h)
 {
 case '0':  test0();break;
 case '1':  test1();break;
 case '2':  test2();break;
 case '3':  test3();break;
 case '4':  test4();break;
 case '5':  test5();break;
 case '6':  test6();break;
 case '7':  test7();break;
 case 27:
 case 'q':exit(0);break;
 default:cout<<"default "<<h<<endl;break;
 }
}
void main()
{
 while(1)
 {
  Test(getch());
 }
} 總結
字符串string的操作無非就是:與別串操作;字串查詢;自身操作;
A.自身屬性:字符串長度
B.與別的字符串進行操作(string1 與 string2 之間的關系):

  1.比較大小
  2.附加,交換
  3.在string1的某個位置上插入string2的字串
  4.string1的某些字符(用位置(index)個數(num)來確定)被string2的某些字符替換
  5.拷貝字串給另一個字符串
C.查找字串:

1.從某個位置開始查詢字串第一次或最後一次出現的位置
2.在string1的某個字串中,查詢字串第一次或最後一次出現的位置
3.從某個位置開始查詢,某個字符第一次或最後一次出現的位置
D.與自身操作:  1.清空;  2.獲取或刪除某個位置上的字符;  3.獲取某個位置上的字串
E.與其他類型之間的轉換:
1.字符串通過地址,atoi(),atof,atol()來轉換成數值
2.C++11:std::stoi(),stof(),stod(),stold(),stol(),stoll(),stoul(),stoull()
3.數值轉換成string或寬字符串wstring:std::to_string(),std::to_wstring()

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved