string實際上是C++內置的一個類,內部對char *進行了封裝,不用擔心數組越界問題,string類中,除了上課講解的函數外,還有很多函數可以使用,可以自行查閱文檔。
構造函數原型:
string(); //創建一個空的字符串 例如: string str;
string(const char* s); //使用字符串s初始化
string(const string& str); //拷貝構造函數
string(int n, char c); //使用n個字符c初始化
string(char *str,int n);//保留前n個字符組成字符串
常用函數
str.size() //取字符串的長度
str.length() //同上取字字符串的長度
str.empty() //判斷字符串是否為空
str1==str2 //判斷字符串是否相等
字符串的追加
string& operator+=(const char* str); //重載+=操作符
string& operator+=(const char c); //重載+=操作符
string& operator+=(const string& str); //重載+=操作符
string& append(const char *s); //把字符串s連接到當前字符串結尾
string& append(const char *s, int n); //把字符串s的前n個字符連接到當前字符串結尾
string& append(const string &s); //同operator+=(const string& str)
string& append(const string &s, int pos, int n);//字符串s中從pos開始的n個字符連接到字符串結尾
取字符
char& operator[](int n); //通過[]方式取字符
char& at(int n); //通過at方法獲取字符
插入
string& insert(int pos, const char* s); //插入字符串
string& insert(int pos, const string& str); //插入字符串
刪除
string& erase(int pos, int n = npos); //刪除從Pos開始的n個字符
string& substr(int pos = 0, int n = npos) const; //返回由pos開始的n個字符組成的字符串。注意接收!!
替換
string& replace(int pos, int n, const string& str); //替換從pos開始n個字符為字符串str
string& replace(int pos, int n,const char* s); //替換從pos開始的n個字符為字符串
#include<iostream>#include<string.h>using namespace std;
int main(){//復習之前講的string函數string str1 = "admin";char str2[23]="9999";cout << str1.at(0) <<endl;cout << str1[0] << endl;cout << "字符串長度0" << str1.size() << endl;cout << "字符串長度" <<str1.length() <<endl;//字符串的遍歷for(char c:str1){cout << c << endl;}cout << "*****" << endl;for(int i=0;i<str1.size();i++){cout << str1[i] << endl;}//string實際上是C++內置的一個類,內部對char *進行了封裝,不用擔數組越界問//類里面有很多方法string str3 = "welcome"; //隱式調用構造函數cout << str3 << endl;string str4("hello");//顯示調用構造函數cout << str4 << endl;// 創建一個堆內存對象string *str5 = new string("world");cout << *str5 << endl;delete str5;string str6(str4);//調用拷貝構造函數cout << str6 << endl;string str7(3,'a');//使用3個字符初始化字符串cout <<str7 <<endl;string str8("ASDFFGGG",3);//保留3個字符組成字符串cout << str8 << endl;cout << str8.empty() << endl; //判斷字符串是否為空cout << (str7 == str8) << endl;//判斷字符串是否相等//字符串的追加string str9("qqqq");string str10("mmmmm");str9+=str10;cout << str9 << endl;str9+="hhhhhh";cout << str9 << endl;//字符追加str9+='u';cout << str9 <<endl;char *str11 = "99999";str9 += str11;cout << str9 <<endl;//字符串的拼接string str12("aaaa");str12.append("wwwww");cout << str12 <<endl;//將字符串的前n個字符拼接到目標字符串的結尾//參數1 從哪個字符串 里選取字符進行拼接//參數2 選取前幾個字符str12.append("werttyu",3);cout << str12 << endl;//將字符串的s中從某個字符開始的n個字符拼接到目標字符串的結尾//參數1 從那個字符串里選取字符進行拼接//參數2 從哪開始//參數3 拼接幾個字符str12.append("mnbvc",1,3);cout << str12 << endl;//插入//參數1 從哪開始插//參數2 插入什么string str13="asdf";str13.insert(2,"nnn"); //在指定位置插入字符串cout << str13 << endl;//asnnndf//刪除(截取)//參數1 從哪開始刪除(截取)//參數2 刪除(截取)幾個字符string str14="asdfg";cout << str14.erase(2,3) << endl;//"as"string str15="nhytgbvfr";cout << str15.substr(2,4) << endl;//"ytgb"//替換//參數1 從哪開始替換//參數2 替換幾個字符//參數3 替換為什么string str16="mnbvc";cout << str16.replace(0,3,"kkk") << endl; //"kkkvc"return 0;
}
?通過string復習運算符重載
#include <iostream>
#include <cstring>
using namespace std;class String{
private:string str;
public:String(const string &s); //構造函數//友元運算符重載friend String operator +(const String &s1,const String &s2);friend bool operator >(const String &s1,const String &s2);friend bool operator <(const String &s1,const String &s2);friend bool operator ==(const String &s1,const String &s2);//成員函數運算符bool operator !=(const String &other);//賦值運算符String& operator =(const String &s);// 類型轉換operator string(); //String轉string//成員函數string get_str() const;
};//構造函數
String::String(const string &s)
{str = s;
}//類型轉換
String::operator string()
{return str;
}//訪問屬性str
string String::get_str() const
{return str;
}///字符串賦值
String& String::operator =(const String &s)
{str=s.str;return *this;
}//字符串長度判等
bool String::operator !=(const String &other)
{return str.size() != other.str.size();
}//字符串拼接
String operator +(const String &s1,const String &s2)
{return s1.str+s2.str;
}
//字符串長度 >
bool operator >(const String &s1,const String &s2)
{return s1.str.size()>s2.str.size();
}
//字符串長度 <
bool operator <(const String &s1,const String &s2)
{return s1.str.size()<s2.str.size();
}//字符串長度 ==
bool operator ==(const String &s1,const String &s2)
{return s1.str.size()==s2.str.size();
}
int main()
{String s1("qwe");String s2("qwe");String s3("QWE");String s4("1234");String s5("12");String s6("5678");String s7("34");if(s1>s2)cout<<"正確"<<endl;elsecout<<"錯誤"<<endl;if(s1>s3)cout<<"正確"<<endl;elsecout<<"錯誤"<<endl;if(s1>s4)cout<<"正確"<<endl;elsecout<<"錯誤"<<endl;cout<<(s2+s3).get_str()<<endl;s2=s3;cout<<s2.get_str()<<" "<<s3.get_str();return 0;
}