String类的操作

string 由头文件<string>支持,支持的对象可以是字符也可以是宽字符

1、初始化

string str("1234567");
char ch[]="abcdefg";
string a;
string str_1(str);//使用str初始化
string str_2(str,2,5);//2,5 限定复制范围

string str_5(str.begin(),str.end());//迭代器的初始化

string str_3(ch,5);//ch数组的前5个元素赋值给str_3

string str_4(5,'x');//初始化str_4有5个‘x'

2.大小

1.返回实际字符的多少

cout<<str_1.size()<<endl;
cout<<str_1.length()<<endl;

2.max_size()最多包含则字符数

cout<<str_1.max_size()<<endl;

3.capacity()

重新分配内存之前,string所能包含的最大字符数。

让string拥有足够的容量是很重要的,原因有二:

1、重新分配会造成所有指向string的references,pointer和iterators失效。

2、重新分配(reallocation)很耗时间。

  因此,如果程序要用到指向string(或其内部字符)的references,pointers和iterators。抑或需要很快的执行速度,就必须考虑容量(capacity)问题。成员函数reserve()就是用来避免重分配行为。reserve()使你得以预留一定容量,并确保该容量尚有余裕之时,reference能够一直保持有效:

std::string s; // create empty string

s.reserve(80); // reserve memory for 80 characters

 

3.元素的随机访问,返回的是字符的引用

1)下标

cout<<str[3]<<endl;

2)at函数
cout<<str.at(3)<<endl;

4.比较

1)比较运算符>,<,>=,<=,==等,成立返回true ,否则返回false

2)compare() 函数,相同返回0,字典中A先于B,返回-1,否则返回正1

string A="aBcdEfg";
string B="AbcdeFg";
string C="123456";
string D="124354";
int m=A.compare(B);//A和整个B比较
int n=A.compare(1,5,B);//A中从1开始的5个字符和B比较
int p=A.compare(0,3,B,4,2);//A中0开始的3个字符和B中4开始的2个字符进行比较

5.修改和替换函数

1)assign()赋值

string str("1234567");
char ch[]="abcdefg";
string str1;
str1.assign(str);//利用str赋值
cout<<str1;
str1.assign(str,3,3);//利用str[3]个位置开始的3个字符赋值
cout<<str1;
str1.assign(str,2,str.npos);//利用str[2]开始到结束赋值
cout<<str1;
str1.assign(5,'x');//利用5个x赋值
cout<<str1;

2)=赋值

3)erase()

str1.erase(str1.begin()+2);//删除开始以后的第二个元素

str.erase (10,8);//str[10]以后的8个元素

str1.erase(str1.begin()+2,str1.end()-3);//利用迭代器限制范围

 4)swap()函数

string str = "12345678";
string str1="98776554434";
cout << str1;
str1.swap(str);
cout << str1; //作用可以交换str和str1的值

5)插入insert

str = "ello";
str1 = "H";
str1.insert(1, str);//将str整个插入str1 第一个字符后
cout << str1;

str = "ello";
str1 = "H";
str1.insert(1, "yanchy", 3);//将“yanchy”三个字符,插入str1 第一个字符后
cout << str1;

str = "ello";
str1 = "H";
str1.insert(1, str, 2, 2);//将str[2]以后2个字符插入str1 第一个字符后
cout << str1;


str = "ello";
str1 = "H";
str1.insert(1, 5, 'x');//插入str1 第一个字符后5个‘x'
cout << str1;

str = "ello";
str1 = "H";
str1.insert(str1.begin()+1, str.begin(), str.end());//迭代器插入,begin()+1,插入位置向后移动一个

6)append()追加函数

str = "ello";
str1 = "H";
str1.append(str);//追加字符串
cout << str1;

str = "ello";
str1 = "H";
str1.append("12345", 2);//追加字符串中前两个字符
cout << str1;

str = "ello";
str1 = "H";
str1.append("12345", 2, 3);//追加字符串中,从0开始的,位置为2的字符,以后两个字符
cout << str1;

str = "ello";
str1 = "H";
str1.append(10,'a');//追加10个’a‘
cout << str1;

str = "ello";
str1 = "H";
str1.append(str.begin(),str.end() );//迭代且追加
cout << str1;

cin.get();

7)replace函数

var.replace(3, 3, dest);//var[3]开始的3个字符被dest替换
cout << var;

var = "abceefg";
var.replace(3, 1, dest, 1, 3);//var[3]开始的一个字符换成dest[1]-dest[3]
cout << var;

var = "abceefg";
var.replace(3, 1, 5, 'x');//var[3]开始的一个字符换成5个x
cout << var;

var = "abceefg";
var.replace(var.begin(),var.end(),dest);//迭代器替换
cout << var;
cin.get();

 

6.字符串的连接

  str=str1+str2;

7.字符串的IO操作

1)>> ,<< 输入输出流

   cin>>str;

   cout<<str;

2)getline(cin,str1) 遇到文杰结束符,分界符,空格,回车,停止输入。

8.查找

size_t m = str.find('3', 1);//从str[1]开始查找,找到返回查找到的下标,否则返回-1
size_t n = str.rfind('3', 1);//从str[1]开始反向查找 可以查找字符和字符串

find_first_of  和find_last_of 使用方法同上

find_first_not_of 和find_last_not_of 

8.c_str()

string str ("Please split this phrase into tokens");

  cstr = new char [str.size()+1];
  strcpy (cstr, str.c_str());

9.。substr()

string str = "123456789";

string s2 = str.substr(1, 3);

返回从1开始的3个字符

转载于:https://www.cnblogs.com/ranranblog/p/5620174.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值