C++ string类总结

目录

1. 初始化

2. 对string对象进行赋值

3. 增

4. 删

5. 改

6. 查

7. string的容量与大小

8. string遍历

9. string大小写转化

10. string分割--substr()

11. string转char* 、char[]

12. char* 、char[]转string

13. 其他常用函数


1. 初始化

  • string str——构造空的string类对象,即空字符串

  • string s(str):生成字符串为str的复制品

  • string str("ABCDE")——等价于 str="ABCDE"

  • string s(cstr, char_len):以C_string类型cstr的前char_len个字符串作为字符串s的初值

string str("ABCDE", 4)  //str = "ABCD"
  • string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值
string  str("ABCDE", 1, 3)  // str = "BCD"
  • string s(num ,c):生成num个c字符的字符串
string  str(5, 'A')  // str = "AAAAA"
  • string s(str, stridx):将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值
string str("ABCDEF", 1)  //  str = "BCDEF"
  • string s7(str.begin(), str.begin()+num); //区间str.begin()和str.begin()+num内的字符作为初值

2. 对string对象进行赋值

可以用 char* 类型的变量、常量,以及 char 类型的变量、常量对 string 对象进行赋值。例如:

string s1;
s1 = "Hello";  // s1 = "Hello"
s2 = 'K';  // s2 = "K”

不常用
string 类还有 assign 成员函数,可以用来对 string 对象赋值。assign 成员函数返回对象自身的引用。例如:

string s1("12345"), s2;
s3.assign(s1);  // s3 = s1
s2.assign(s1, 1, 2);  // s2 = "23",即 s1 的子串(1, 2)
s2.assign(4, 'K');  // s2 = "KKKK"
s2.assign("abcde", 2, 3);  // s2 = "cde",即 "abcde" 的子串(2, 3)

3. 增

  • string &insert(int p, const string &s)--在p位置插入字符串s
str.insert(2,"ABC");  //在str下标为2的位置添加字符串"ABC"
str.insert(2,3,'A');  //在str下标为2的位置添加3个字符'A'
str.insert( iterator pos, size_type count, CharT ch );  //在 str 中,迭代器指向的pos位置插入count个字符ch
s4.insert(++str1.begin(),2,'a');  //结果:s4:ABCD->AaaBCD
//下面的不常用
str.insert(2,"ABC",1);  //在str下标为2的位置添加字符串 "ABC" 中1个字符
str.insert(2,"ABC",1,1);  //在str下标为2的位置添加字符串 "ABC" 中从位置1开始的1个字符
str.insert( iterator pos, InputIt first, InputIt last);  //在 str 中,pos位置 插入str1 的开始位置到结束为止
s4.insert(s4.begin(),str1.begin(),str1.end());  //结果:s4:ABCD str1:abc->abcABCD
  • +=
str += "ABC"  //在str后拼接"ABC",也可拼接字符
  • append(string str)--/在str末尾添加一个字符串 str,参数必须是字符串形式
str.append("ABC")  //在str末尾添加一个字符串 "ABC",参数必须是字符串形式
  • pack_push(char c)--在str末尾添加一个字符c ,参数必须是字符形式
str.push_back('A')  //在str末尾添加一个字符  'A' ,参数必须是字符形式

4. 删

  • iterator erase(iterator p);//删除字符串中p所指的字符

  • iterator erase(iterator first, iterator last);//删除字符串中迭代器区间[first,last)上所有字符

  • string& erase(size_t pos = 0, size_t len = npos);//删除字符串中从索引位置pos开始的len个字符
    注:可以用迭代器操作,也可以用下标操作

string s1("Real Steel");
s1.erase(1, 3);  //删除子串[1, 4),此后 s1 = "R Steel"
s1.erase(5);  //删除下标5及其后面的所有字符,此后 s1 = "R Ste"

5. 改

  • string& replace(size_t pos, size_t n, const char *s);//将当前字符串从pos索引开始的n个字符,替换成字符串s

  • string& replace(size_t pos, size_t n, size_t n1, char c); //将当前字符串从pos索引开始的n个字符,替换成n1个字符c

  • string& replace(iterator i1, iterator i2, const char* s);//将当前字符串[i1,i2)区间中的字符串替换为字符串s
    注:1、(m,n)子串表示m开始长度为n的子串。2、可以用迭代器操作,也可以用下标操作

string s1("hello,world!");
cout<<s1.size()<<endl;                     // 结果:12
s1.replace(s1.size()-1,1,1,'.');           // 结果:hello,world.
// 这里的6表示下标  5表示长度
s1.replace(6,5,"girl");                    // 结果:hello,girl.
// s1.begin(),s1.begin()+5 是左闭右开区间
s1.replace(s1.begin(),s1.begin()+5,"boy"); // 结果:boy,girl.
cout<<s1<<endl;

6. 查

  • find()--从前往后查找子串或字符出现的位置。
  • rfind()-从后往前查找子串或字符出现的位置。
size_t find (const char* s, size_t pos = 0) const;
  //在当前字符串的pos索引位置开始,查找子串s,返回找到的位置索引,-1表示查找不到子串
size_t find (char c, size_t pos = 0) const;
  //在当前字符串的pos索引位置开始,查找字符c,返回找到的位置索引,-1表示查找不到字符
size_t rfind (const char* s, size_t pos = npos) const;
//在当前字符串的pos索引位置开始,反向查找子串s,返回找到的位置索引,-1表示查找不到子串
size_t rfind (char c, size_t pos = npos) const;
  //在当前字符串的pos索引位置开始,反向查找字符c,返回找到的位置索引,-1表示查找不到字符
string s("dog bird chicken bird cat");
//字符串查找-----找到后返回首字母在字符串中的下标
// 1. 查找一个字符串
cout << s.find("chicken") << endl;        // 结果是:9
// 2. 从下标为6开始找字符'i',返回找到的第一个i的下标
cout << s.find('i',6) << endl;            // 结果是:11
// 3. 从字符串的末尾开始查找字符串,返回的还是首字母在字符串中的下标
cout << s.rfind("chicken") << endl;       // 结果是:9
// 4. 从字符串的末尾开始查找字符
cout << s.rfind('i') << endl;             // 结果是:18-------因为是从末尾开始查找,所以返回第一次找到的字符

7. string的容量与大小

int capacity()const;    //返回当前容量(即string中不必增加内存即可存放的元素个数)
int max_size()const;    //返回string对象中可存放的最大字符串的长度
int size()const;        //返回当前字符串的大小
int length()const;       //返回当前字符串的长度
bool empty()const;        //当前字符串是否为空
void resize(int len,char c);  //把字符串当前大小置为len,多去少补,多出的字符c填充不足的部分,如果不填char c参数,会用'\0'补全

8. string遍历

	string s1("abcdef"); // 调用一次构造函数
	// 方法一: 下标
	for( int i = 0; i < s1.size() ; i++ )
	{
		cout<<s1[i];
	}
	cout<<endl;
	// 方法二:正向迭代器
	string::iterator it;
	for(it = s1.begin() ; it < s1.end() ; it++)
	{
		cout<<*it;
	}
	cout<<endl;
	// 方法三:反向迭代器
	string::reverse_iterator rit;
	for(rit = s1.rbegin(); rit < s1.rend() ; rit++)
	{
		cout<<*rit;
	}
	cout<<endl;

9. string大小写转化

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main(){
    string input;
    string lower,upper;
    cin >> input;

    lower.resize(input.size());
    upper.resize(input.size());

    transform(input.begin(), input.end(), lower.begin(), ::tolower);
    transform(input.begin(), input.end(), upper.begin(), ::toupper);

    cout << "Tolower Result :" << endl << lower << endl;
    cout << "Toupper Result :" << endl << upper << endl;

    return 0;
}

10. string分割--substr()

  • string substr(int n = 0, int m = string::npos) const;
    用于求子串 [n, n+m),调用时,如果省略 m 或 m 超过了字符串的长度,则求出来的子串就是从下标 n 开始一直到字符串结束的部分
string s1 = "this is ok";
string s2 = s1.substr(2, 4);  // s2 = "is i"
s2 = s1.substr(2);  // s2 = "is is ok"

11. string转char* 、char[]

char buf[10];
string str("ABCDEFG");
strcpy(buf, str.c_str());

12. char* 、char[]转string

方法1:
char ch [] = "ABCDEFG";
string str(ch);//也可string str = ch;
方法2:
char ch [] = "ABCDEFG";
string str;
str = ch;//在原有基础上添加可以用str += ch;

13. 其他常用函数

void swap(string &s2);    //交换当前字符串与s2的值
const char *data()const;   //返回一个非null终止的c字符数组,data():与c_str()类似,用于string转const char*其中它返回的数组是不以空字符终止,
compare(string s)//s与当前字符串完全相等返回0;完全不等返回小于0;部分相等返回大于0
reverse(str.begin(),str.end())//str的开始到结束字符反转,注意加头文件<algorithm>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值