#include <iostream>
#include<string>
using namespace std;
int main()
{
//string的几种构造函数初始化
string s0 ("Initial string");//也可以直接这样:s0="Initial string";
cout<<s0<<endl;//输出:Initial string
string s1;
cout<<s1<<endl;//输出为空
string s2 (s0);//用另一个对象做初始化
cout<<s2<<endl;//输出:Initial string
string s3 (s0, 8, 3);//以对象s0字符串下标8开始连续3个赋给s3
cout<<s3<<endl;//输出:str
string s4 ("A character sequence");
cout<<s4<<endl;
string s5 ("Another character sequence", 12);//以字符串的前12个字符做初始化
cout<<s5<<endl;//输出:Another char
string s6 (10, 'x');//以10个x做初始化
cout<<s6<<endl;//输出:xxxxxxxxxx
string s7 (10, 42); //以10个ASCII编码值为42的字符做初始化
cout<<s7<<endl;//输出:**********
string s8 (s0.begin(), s0.begin()+7);//以s0的一段做初始化,但不包括s0.begin()+7
cout<<s8<<endl;//输出:Initial
return 0;
}
int main()
{
/**********************************
*
*append():给对象尾部追加一些字符
*
**********************************/
string s0("abcd");//s0="abcd"
s0.append("ef");//s0="abcdef"
string s1="123456789";
s0.append(s1,3,5);//从s1的下标3处开始添加5个字符
cout<<s0<<endl;//s0=abcdef45678
string s2="111";
s2.append(3,'2');//追加3个字符2,第二个参数也可以写ASCII值
cout<<s2<<endl;//s2=111222
string s3="abcd";
s3.append(s1.begin()+3,s1.begin()+6);//把s1的一段字符追加上
cout<<s3<<endl;//s3=abcd456
return 0;
}
int main()
{
/**********************************************************************
//assign()函数的几种用法
string s0="123456";
string base="abcdefghijklmnopq";
s0.assign(base);//s0="abcdefgh"
s0.assign(base,3,2);//s0="de"
s0.assign("987654321",7);//s0="9876543"
s0.assign(3,'a');//s0="aaa"
s0.assign(base.begin()+2,base.end()-5);//s0="cdefghijkl"
***********************************************************************/
/*****************************************************
//at()函数的用法
string str ("123456789");
str.at(5)='0';//修改下标为5的值
cout<<str<<endl;//str="123450789"
cout<<str.at(2);//访问下标为2的值,输出为:3
************************************************/
/******************************************************
//clear(),compare()用法
string s="12345";
s.clear();//清空s
string s1="defghilkjh";
string s2="abcdefgh";
s1.compare(s2);//把字符串s1与s2比较,s1大于s2,返回1;s1等于s2,返回0,小于返回-1
s1.compare(3,4,"abcd");//从s1下标3开始截取连续4个字符与"abcd"比较。
s1.compare(1,2,s2,2,3);//从s1,s2截取一段比较。
**********************************************************/
/***********************************************************
//copy()函数的笔记
//size_t copy (char* s, size_t len, size_t pos = 0) const;
char buf[20];
string s0(8,'a');
cout<<s0<<endl;
string s1;
s1.resize(10);
size_t s=s0.copy(buf,5,0);//5代表拷贝5个字符,0代表从下标0开始,buf代表拷贝到的地方
//这个函数返回值为:拷贝的字符个数
//注意,我把参数buf改成s1,会报错。
buf[s]='\0';
cout<<buf<<endl;//buf="aaaaa"
*******************************************************************/
return 0;
}
int main()
{
/**************************************************
//c_str()函数用法:const char* c_str() const;
char p[20];
string s("abcdef");
s.c_str();//函数返回一个指向正规C字符串的指针,但不能用char *p来接收。
strcpy(p,s.c_str());//只能这么用
cout<<p<<endl;//字符数组p=abcdef
const char *b=s.c_str();
cout<<b<<endl;//b=s
*****************************************************/
/*****************************************************
//data()的用法:与c_str()函数类似
//const char* data() const;
char p0[20];
string s0="123456";
strcpy(p0,s0.data());//p0=s0
const char *a0=s0.data();//a0=s0
cout<<a0<<endl;
******************************************************/
/*************************************************
//erase()函数的用法
string s("123456");
s.erase(0,2);//s="3456"
string s1("123456789");
s1.erase(s1.begin()+1,s1.begin()+3);//s1="1456789"
string s2("123456789");
s2.erase(s2.begin());//s2="23456789"
**********************************************/
return 0;
}
int main()
{
/**********************************************************************************************
//(1)size_t find (const string& str, size_t pos = 0) const; //查找对象--string类对象
//(2)size_t find (const char* s, size_t pos = 0) const; //查找对象--字符串
//(3)size_t find (const char* s, size_t pos, size_t n) const; //查找对象--字符串的前n个字符
//(4)size_t find (char c, size_t pos = 0) const; //查找对象--字符
string s0="123456789";
string s1="456";
int a=s0.find(s1);//在s0中找到s1,返回s0的起始下标,a=3;找不到返回空
s0.find("34",2,2);//第一个参数代表查找的字符串,第二个参数代表从s0查找的起始下标,第三个参数从选定的起始下标开始,查找字符个数
//找到了返回起始下标,找不到,返回-1
char c='6';
cout<<s0.find(c,3);//在s0中查找一个字符c,从下标3开始,找到返回下标,找不到返回一个未知数;第一个参数也可以传一个字符串
*********************************************************************************************************/
/*************************************************************************************************8
//find_first_not_of()
//返回在字符串中首次出现的不匹配str中的任何一个字符的首字符索引, 从index开始搜索, 如果全部匹配则返回string::npos。
//size_type find_first_not_of(const string &str,size_type index =0 )const;
//size_type find_first_not_of(const Char* str,size_type index =0 )const;
//从index开始起搜索当前字符串, 查找其中与str前num个字符中的任意一个都不匹配的序列, 返回满足条件的第一个字符索引, 否则返回string::npos。
//size_type find_first_not_of(const Char* str,size_type index,size_type num )const;
//返回在当前字符串中第一个不匹配ch字符的索引, 从index开始搜索, 没用收获则返回string::npos。
//size_type find_first_not_of(Char ch,size_type index =0 )const;
string s0="abcdefgh";
string s1="abcdef";
cout<<s0.find_first_not_of(s1);//从下标0开始,与s1中开始比较,找到第一个不匹配的字符,返回下标,相等返回一个未知数。
cout<<s0.find_first_not_of("cb",2,3);//从s0的下标2开始查找3个字符中首次与字符串不匹配的字符,并返回其下标。
***********************************************************************************************************************/
/***********************************************************************************************
//find_first_of()笔记:
string s0="123456789";
string s1="456";
//从s0的下标1开始(第二个参数可以不写,默认从0开始),找到首次与s1中第一个字符相同的字符并返回其下标。
cout<<s0.find_first_of(s1,1)<<endl;
//从s0的下标1开始,查找与字符串“abc79”的前三个字符中某个字符首次匹配,返回在s0中下标值。
cout<<s0.find_first_of("abc79",1,3)<<endl;
***************************************************************************************************/
/***************************************************************************************
//(1)size_t find_last_not_of (const string& str, size_t pos = npos) const;
//(2)size_t find_last_not_of (const char* s, size_t pos = npos) const;
//(3)size_t find_last_not_of (const char* s, size_t pos, size_t n) const;
//(4)size_t find_last_not_of (char c, size_t pos = npos) const;
string s0="abcdefghijk";
string s1="abd";
//从s0下标7开始(不写7从最后一位开始)与s0匹配(倒着走,7下来是6),返回首次字符不匹配的下标。这里返回是7
cout<<s0.find_last_not_of(s1,7);
//其他几个函数与find_first_not_of()类似
*************************************************************************************/
//(1)size_t find_last_of (const string& str, size_t pos = npos) const;
//(2)size_t find_last_of (const char* s, size_t pos = npos) const;
//(3)size_t find_last_of (const char* s, size_t pos, size_t n) const;
//(4)size_t find_last_of (char c, size_t pos = npos) const;
string a="cde456";
string b="1234";
cout<<a.find_last_of(b);//意思与find_last_not_of()差不多,只是找的是首次匹配的
return 0;
}
int main()
{
//没有back(),cbegin(),cend()函数
//compare()笔记
// int compare (const string& str) const;
// int compare (size_t pos, size_t len, const string& str) const;
// int compare (size_t pos, size_t len, const string& str,size_t subpos, size_t sublen) const;
// int compare (const char* s) const;
// int compare (size_t pos, size_t len, const char* s) const;
// int compare (size_t pos, size_t len, const char* s, size_t n) const;
string s0="bcdefgh";
string s1="bcdefgh";
//cout<<s0.compare(s1);//s0>s1 返回值大于0(具体值怎么计算没搞懂);小于返回值小于0,相等等返回0
cout<<s0.compare(3,8,"fg");//第一个参数表示从s0的哪个下标开始比较;第二个为比较的字符个数,第三个为与s0比较的字符串
cout<<s0.compare(0,2,s1,2,1);//最后两个参数分别表示字从符串s1的下标2开始选一个字符比较。
return 0;
}
int main()
{
/**************************************
没有front()函数
insert()函数:
(1)string& insert (size_t pos, const string& str);
(2)string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);
(3)string& insert (size_t pos, const char* s);
(4)string& insert (size_t pos, const char* s, size_t n);
(5)string& insert (size_t pos, size_t n, char c);
void insert (iterator p, size_t n, char c);
(6)iterator insert (iterator p, char c);
(7)template <class InputIterator>
void insert (iterator p, InputIterator first, InputIterator last);
**************************************/
//以下是关于insert()函数的示例
string str="012345";
string str2="6";
string str3="000abcd";
string::iterator it;
//str.insert(6,str2);//str="0123456"
//str.insert(6,str3,3,4);//str="012345abcd
//str.insert(5," 3210abc",3);//str="01234 325"
//str.insert(1,"to be");//str="0to be12345"
//str.insert(6,3,':');//str="012345:::"
//it = str.insert(str.begin()+5,',');//str="012345,"; *it=','
//str.insert (str.end(),3,'.');//str="012345..."
str.insert (str.begin()+2,str3.begin(),str3.begin()+3); //str="010002345"
return 0;
}
int main()
{
/******************************************************
//size()、length()、capacity()、max_size()示例
string str;
for(int i=0;i<100;i++)
str.push_back(i);
cout << "size: " << str.size() << "\n";
cout << "length: " << str.length() << "\n";
cout << "capacity: " << str.capacity() << "\n";
cout << "max_size: " << str.max_size() << "\n";
//输出结果codeblocks下:
//size: 100
//length: 100
//capacity: 128
//max_size: 1073741820
*************************************************************/
/******************************************
// "+="、"="的重载:示例如下
string name ("John");
string family ("Smith");
name += " K. ";//name="John K. "
name += family;//name="John K. Smith"
string s;
s="123";
cout<<s;//输出123
//还有[]的重载,不做示例
********************************************/
/************************************************
//rbegin()、rend()练习示例
string s0="123456789";
string::reverse_iterator rit=s0.rbegin();
int i=0;
while(i<9)//输出结果为:987654321
{
cout<<*rit;
rit++;
i++;
}
rit=s0.rend();
cout<<endl<<*rit;//输出空
rit--;
cout<<endl;
while(i>0)//输出为:123456789
{
cout<<*rit;
rit--;
i--;
}
****************************************************/
return 0;
}
int main()
{
/*****************************************************************************************
//replace()用法示例
string base="this is a test string.";
string str2="n example";
string str3="sample phrase";
string str4="useful.";
string str=base;
str.replace(9,5,str2);//从str的下标9开始的连续5个字符用str2代替,若5改为0就相当于插入了
//str="this is an example string."
str.replace(19,6,str3,7,6);//从str的下标19开始的连续6个字符用从str3的下标7开始连续6个字符代替
//str="this is an example phrase."
str.replace(8,10,"just a");//从str的下标8开始的连续10个字符用"just a"代替
// str="this is just a phrase."
str.replace(8,6,"a shorty",7); //从str的下标8开始的连续6个字符用"a shorty"的前7个字符代替
//str="this is a short phrase."
str.replace(22,1,3,'!');//从str的下标22开始的连续1个字符用3个'!'代替
//str="this is a short phrase!!!"
str.replace(str.begin(),str.end()-3,str3);//把str从str.begin()到str.end()-3用str3代替。
// str="sample phrase!!!"
************************************************************************************************/
/*******************************************/
//reserve(),resize()函数作用
string s;
for(int i=0;i<100;i++)
s.push_back(i);
//void reserve (size_t n = 0);
//s.reserve();//从新设置capacity的大小,参数不不写默认为0,如果设置的小于本身size的大小,不会改变capacity.
// 函数原型:
//void resize (size_t n);
//void resize (size_t n, char c);
//s.resize(10);//会改变size大小,影响capacity(原先capacity如果小于新设置的size,否则不会改变)
string s1="45678";
s1.resize(10,'a');//第二个参数代表当设置的size大于原先的size时,剩余的位置补'a'.
/***********************************************/
return 0;
}
int main()
{
//rfind()几种用法:
/*****************************************************************************
第一个参数表示要找的字符,第二个参数表示从那个地方开始向前找,找到返回第一个字符索引,找不到返回随机数
string (1)size_t rfind (const string& str, size_t pos = npos) const;
c-string (2)size_t rfind (const char* s, size_t pos = npos) const;
buffer (3)size_t rfind (const char* s, size_t pos, size_t n) const;
character (4)size_t rfind (char c, size_t pos = npos) const;
*******************************************************************************/
// string str="123456";
// string s("456");
// cout<<str.rfind(s,5);//输出3
/***********************************************************************
//substr()函数作用:
// string substr (size_t pos = 0, size_t len = npos) const;
string s0="123654";
cout<<s0.substr(0,1);//从s0的下标0开始截取1个字符;并返回所截取字符串。
**************************************************************************/
/******************************************************************
// swap()函数:
// void swap (string& str);
string s0="4567";
string s1="123";
s1.swap(s0);//交换两个string类型的字符串s1="4567",s0="123"
********************************************************************/
string s;
getline(cin,s);
cout<<s;
return 0;
}
string相关学习笔记
最新推荐文章于 2024-10-01 13:52:18 发布