生活随笔
收集整理的這篇文章主要介紹了
c++中的string类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
string類
string是表示字符串的字符串類該類的接口與常規容器的接口基本相同,再添加了一些專門用來操作string的常規操作。string在底層實際是:basic_string模板類的別名,typedef basic_string<char, char_traits, allocator> string;不能操作多字節或者變長字符的序列。在使用string類時,必須包含頭文件以及using namespace std;
string類常見構造
函數名稱 功能說明
string() 構造空的string類對象,即空字符串
string(const char* s) 用C-string來構造string類對象
string(size_t n, char c) string類對象中包含n個字符c
string(const string&s) 拷貝構造函數
string(const string&s, size_t n) 用s中的前n個字符構造新的string類對象
示例
#include<iostream>
#include<string>
using namespace std;void test01()
{string str;//默認構造string str2(str);//拷貝構造string str3 = str;string str4 = "abcd";string str5(10, 'a');cout << str4 << endl;cout << str5 << endl;
}int main()
{test01();system("pause");return 0;
}
string類對象的容量操作
函數名稱 功能說明
size_t size() const 返回字符串有效字符長度
size_t length() const 返回字符串有效字符長度
size_t capacity ( ) const 返回空間總大小
bool empty ( ) const 檢測字符串釋放為空串,是返回true,否則返回false
void clear() 清空有效字符
void resize ( size_t n, char c ) 將有效字符的個數該成n個,多出的空間用字符c填充
void resize ( size_t n ) 將有效字符的個數改成n個,多出的空間用0填充
void reserve ( size_t res_arg=0 ) 為字符串預留空間
string類對象的訪問操作
函數名稱 功能說明
char& operator[] ( size_t pos ) 返回pos位置的字符,const string類對象調用
const char& operator[] ( size_t pos ) const 返回pos位置的字符,非const string類對象調 用
string類對象的修改操作
函數名稱 功能說明
void push_back(char c) 在字符串后尾插字符c
string& append (const char* s); 在字符串后追加一個字符串
string& operator+=(const string& str) 在字符串后追加字符串str
string& operator+=(const char* s) 在字符串后追加C個數字符串
string& operator+=(char c) 在字符串后追加字符c
const char* c_str( )const 返回C格式字符串
size_t ?nd (char c, size_t pos = 0)const 從字符串pos位置開始往后找字符c,返回該字符在 字符串中的位置
size_t r?nd(char c, size_t pos = npos) 從字符串pos位置開始往前找字符c,返回該字符在 字符串中的位置
string substr(size_t pos = 0, size_t n = npos)const 在str中從pos位置開始,截取n個字符,然后將其 返回
string類非成員函數
函數 功能說明
operator+ 盡量少用,因為效率低
operator>> 輸入運算符重載
operator<< 輸出運算符重載
getline 獲取一行字符串
relational operators 大小比較
#include<iostream>
#include<string>
using namespace std;
#include<stdexcept>void test01()
{string str;//默認構造string str2(str);//拷貝構造string str3 = str;string str4 = "abcd";string str5(10, 'a');cout << str4 << endl;cout << str5 << endl;//基本賦值str = "hello";str2 = str4;//string &assign(const char *s,int n)//把字符串s的前n個字符賦給當前的字符串str3.assign("abcdef", 4);cout << str3 << endl;//string &assign(const string *s,int start,int n)//將s從start開始n個字符賦值給字符串string str6;str6.assign(str, 1, 3);//ell ? hel 從0索引cout << str6 << endl;}void test02()
{string s = "hello world";for (int i = 0; i < s.size(); i++){//cout << s[i] << endl;cout << s.at(i) << endl;}//[]和at區別?[]訪問越界,直接掛掉 at會拋出異常try{//cout << s[100] << endl;cout << s.at(100) << endl;}catch (out_of_range& e){cout << e.what() << endl;}catch (...){cout << "越界異常" << endl;}
}void test03()
{//拼接string s1 = "我";string s2 = "愛北京";s1+=s2;cout << s1<< endl;s1.append("天安門");cout << s1 << endl;//find查找string s = "abcdefg";int pos = s.find("bcf");//找不到返回-1cout << "pos=" << pos << endl;int pos2 = s.rfind("bc");//rfind和find結果一樣,內部查找方式不一樣cout << "pos2=" << pos2 << endl;//替換string s3 = "hello";s3.replace(1, 3, "1111");//替換從pos開始n個字符為字符串strcout << s3 << endl; //he1111o
}void test04()
{string s1 = "bbc";string s2 = "abc";if (s1.compare(s2) == 0){cout << "s1等于s2" << endl;}else if (s1.compare(s2)==1){cout << "s1大于s2" << endl;}else{cout << "s1小于s2" << endl;}
}void test05()
{string s1 = "abcde";string s2 = s1.substr(1, 3);cout <<"s2="<< s2 << endl;//需求,查找一個郵件的用戶名string email = "zhangtao@sina.com";int pos=email.find("@");//cout << "pos" << pos << endl;string userName = email.substr(0, pos);cout << "用戶名" << userName << endl;}void test06()
{string s1 = "hello";s1.insert(1, "111");cout << s1 << endl;//h111ello//刪除111s1.erase(1, 3);cout << s1 << endl;
}/*
string和c-style字符串轉換
*/void func(string s)
{cout << s << endl;
}void func2(char *s)
{cout << s << endl;
}
void test07()
{string s = "abc";//string->char *const char *p = s.c_str();func(p);//const char *隱式類型轉換為string//const char *->string string s2(p);//func2(s2);//string 不能隱式類型轉換成char *}
void test08()
{string s = "abcdefg";char &a = s[2];char &b = s[3];a = '1';b = '2';cout << s << endl;cout << (int *)s.c_str() << endl;s = "pppppppppppppppp";/*a='1';b = '2';*/cout << s << endl;cout << (int *)s.c_str() << endl;
}/*
寫一個函數,函數內部string字符串中的所有小寫字母都變成大寫字母*/
void test09()
{string s = "abCdEfg";for (int i = 0; i < s.size(); i++){//s[i] = toupper(s[i]); //全變小寫s[i] = tolower(s[i]);}cout << s << endl;}int main()
{//test01();//test02();//test03();///test04();//test05();///test06();//test07();//test08();test09();system("pause");return 0;
}
總結
以上是生活随笔為你收集整理的c++中的string类的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。