C++string相关用法

详解请参考:string

string s;

构造函数

string str:生成空字符串,空

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

string s(str,strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值,截取

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

string s(num ,c):生成num个c字符的字符串

string s(str, stridx):将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值
string s(s.rbegin()
eg:

string s1;//""
string s2("12345");//"12345"
string s3("12345",0,2); //"12"
string s4(5, 'a');//"aaaaa"
string s5("123456",2)//"3456"
string s6 = "hello"//正确
string s7 = "hello"+"world"//错误

排序

eg:

string s = "dcb"
sort(s.begin(),s.end())//从小到大 s="bcd"

反转

eg:

string s = "dcb"
reverse(s.begin(),s.end())//s="bcd"

长度

size()和length():返回string对象的字符个数,他们执行效果相同。 s.length()<==>等价于 s.size()
注: 返回值类型size_t,最好不要直接和int类型比较,如果int是负数,会转变成无符号类型,导致比较出现错误

eg:

string s = "dcb"
s.size();//3
s.length();//3

容量

max_size():返回string对象最多包含的字符数,超出会抛出length_error异常

s.max_size()//4294967294

capacity():重新分配内存之前,string对象能包含的最大字符数 s.capacity()

比较

按字典序大小比较 0:相等 1:大于  -1:小于

//方法1直接比较
string A("ABcc")//'c':99
string B("ABCc)'C':67
A > B//"1"

//方法2使用函数比较
A.compare(B)//"1"
B.compare(A)//"-1"
//比较A的"ab"和B的"ab"
A.compare(0,2,B,0,2)//"0"

插入

push_back()和insert()

string s=""
//push_back():用于在结尾插入一个字符
s.push_back('a')//s="a"

//insert():在指定位置前插入字符char
s.insert(s.begin(),'b')//s="ba"

std::string str ("hello world.");
str.front() = 'H';
str.back() = '!';
std::cout << str << '\n';//"Hello world!"

获取:

 s.back()//获取最后一个字符
 s.front()//获取第一个字符

遍历

//方法1:下标法
for(int i = 0 ; i < s.size(); i++){
    cout <<s[i];
}

//方法2:迭代器
for(string::iterator iter = s.begin(); iter<s.end()); iter++){
    cout << *iter;
}

//方法三增强for
for(auto c : s){
    cout << c;
}

删除

pop_back()和erase() pop_back():删除最后一个字符 s.pop_back();
/
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个字符
/
void clear()//删除字符串所有字符

string s = "123456789"
s.erase(s1.begin()+1)//删除索引为1的字符"13456789"
s.erase(s1.begin(),s1.end()-1)//删除索引1到len-1的字符"189"
s.erase(1,6)//删除从索引1的后6个字符"189"

找子串

//找不到返回-1,pos可省略,默认从开头找 s.find(s1,pos)
从pos开始查找s中第一次出现s1的位置,并返回(包括0)
/
s.rfind(s1,pos) 从pos开始查找s中最后次出现s1的位置,并返回(包括0)
s.find_first_of(s1,pos) 从pos开始查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)
s.find_last_of(s1,pos) 从pos开始查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)
s.fin_first_not_of(s1,pos) 从pos开始查找s中第一个不属于s1中的字符的位置,并返回(包括0)
s.fin_last_not_of(s1,pos) 从pos开始查找s中最后一个不属于s1中的字符的位置,并返回(包括0)

截取

string substr (size_t pos = 0, size_t len = npos)

注:如果参数值无效返回原字符串

替换

  1. string& replace(size_t pos, size_t n, const char *s);//将当前字符串从pos索引开始的n个字符,替换成字符串s
  2. string& replace(size_t pos, size_t n, size_t n1, char c); //将当前字符串从pos索引开始的n个字符,替换成n1个字符c
  3. string& replace(iterator i1, iterator i2, const char* s);//将当前字符串[i1,i2)区间中的字符串替换为字符串s
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;

交换

void swap (string& str);

stirng s1 = "apple"
string s2 = "banana"
s1.swap(s2)//s1 ="banana" s2= "apple"

转换

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

大小写转换

string str1(str.size());
transform(str.begin(),str.end(),str1.begin(),tolower)
transform(str.begin(),str.end(),str1.begin(),toupper)
//tolower(char c)和toupper(char c) c语言内置函数

自定义转换

#include <iostream>
#include <algorithm>
using namespace std;
char op(char ch)
{
   if(ch>='A'&&ch<='Z')
        return ch+32;
    else
        return ch;
}
int main()
{
    string first,second;
    cin>>first;
    second.resize(first.size());
    transform(first.begin(),first.end(),second.begin(),op);
    cout<<second<<endl;
    return 0;
}


分割
char str[] = "I,am,a,student; hello world!";
const char *split = ",; !";
char *p2 = strtok(str,split);
while( p2 != NULL )
{
    cout<<p2<<endl;
    p2 = strtok(NULL,split);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Baal Austin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值