小言_互联网的博客

c++ String 用法详解 (全面解析)

482人阅读  评论(0)

一。string的初始化
首先要定义它的头文件

#include<string>

string类是一个模板类,位于名字空间std中,通常为方便使用还需要增加:

using namespace std;

然后我们先将声明一个string类型变量的操作

 string  a;
    a = "hello";//给a赋值 “hello”
    char b[]="world";
    string a1(a);//调用构造函数生成a1,a1是a的复制
    cout << a1 <<endl;
    string a2 (a,2);//这个意思是从a的第二个字符开始复制
    cout << a2 <<endl;
    string a3(a,2,2);//这个意思是从a的第二个字符开始复制两个字符
    cout << a3 <<endl;
     string a4(b);//这是以b字符串作为初值
     cout << a4 <<endl;
     string a5(b,3);//这是将b字符串的前三个作为初值
     cout << a5 <<endl;
     string a6(5,'c');//这是以5个字符c作为初值
     cout << a6 <<endl;
     string a7(a.begin(),a.begin()+2);//以区间a.begin()到a.begin()+2之间的字符为初值
     cout << a7 <<endl;

结果

二。string的比较操作,首先对于string型的字符串,它的比较是很简单的,不用去记那些c中字符串的
比较函数,只要用>,<,==,>=这些数学符号就可以。还可以可以用+或者+=操作符连接两个字符串

string  a;
    a = "hello";//给a赋值 “hello”
  if(a=="world")
    cout << "yes" <<endl;
  else
    if(a>"world")
  {
      cout << "You win."<< endl;
  }
  else
    cout << "You failed."<< endl;
  a+=" world";
  cout << a<<endl;

结果

三。string的查找操作
查找函数是a.find(),里面可以是一个字符,也可以是字符串,如果找到返回第一个出现的位置,如果找
不到返回-1这个是从前往后查找
还有一个是a.rfind(),这个和find()的操作一样,返回值也一样,这不过他是从后往前查找
find函数:从头查找

str.find(‘A’)——查找 ‘A’
str.find(“ABC”)——查找 “ABC”
int n=s4.find(“ABC”); s4:ABCD -> n = 0

str.find(‘B’,1)——从 位置1 处,查找’B’
str.find(“ABC”,1,2)——从 位置1 处,开始查找 ‘ABC’ 的前 2个 字符
rfind函数:从尾部查找

str.rfind(‘A’)——查找 ‘A’
str.rfind(“ABC”)——查找 “ABC”
int n=s4.rfind(“ABC”); s4:AAAABCD -> n = 3

str.rfind(‘B’,1)——从 位置1 处,向前查找’B’
str.rfind(“ABC”,1,2)——从 位置1 处,开始向前查找 ‘ABC’ 的前 2个 字符

 string  a="hello";
   int b;
   b=a.find("o");//查找字符o在a中的第一个位置
   cout << b <<endl;
   b=a.find("ell");//查找字符串"ell"在字符串a中第一次出现的位置
   cout << b <<endl;
   b=a.find("elu",0,2);//从下标0开始查找"elu"字符串的前两个字符
   cout << b <<endl;
   b=a.find("d");
   cout << b <<endl;//当找不到时返回-1
    b=a.find("o",5);//从下标5开始往后查找查找
    cout << b <<endl;
     b=a.rfind("l");//查找字符l在a中从后往前的第一个位置
   cout << b <<endl;
    b=a.rfind("ell");//查找字符串"ell"在字符串a中从后往前第一次出现的位置
   cout << b <<endl;
    b=a.rfind("l",2);//从第五个字符开始向前查找
    cout << b <<endl;

   //查找s 中flag 出现的所有位置。
    char flag[]="l";
    int position=0;
    int i=1;
    while((position=a.find(flag,position))!=-1)
    {
        cout<<"position  "<<i<<" : "<<position<<endl;
        position++;
        i++;
    }

结果

四。string字符串和数值的转换
在做题中我们总会遇到一些整数转字符串或者字符串转整数类型的操作,这里就用string实现这一操

1.string和数值转换 转换类型
to_string(val) 把val转换成string
stoi(s,p,b) 把字符串s从p开始由b进制转化为十进制的int
stol(s,p,b) 把字符串s从p开始由b进制转化为十进制的long
stoul(s,p,b) 把字符串s从p开始由b进制转化为十进制的unsigned long
stoll(s,p,b) 把字符串s从p开始由b进制转化为十进制的long long
stoull(s,p,b) 把字符串s从p开始由b进制转化为十进制的unsigned long long
stof(s,p) 把字符串s从p开始转换成float
stod(s,p) 把字符串s从p开始转换成double
stold(s,p) l把字符串s从p开始转换成long double

#include <bits/stdc++.h>
#include <map>
using namespace std;
int main(){
	string s="222.22";
	cout<<"s="<<s<<endl;
	int a = 222;
	int ot = stoi(s,0,10);
	int ol = stol(s,0,10);
	float of = stof(s,0);
	double od = stod(s,0); 
	cout<<"ot="<<ot<<endl;
	cout<<"ol="<<ol<<endl;
	cout<<"of="<<of<<endl;
	cout<<"od="<<od<<endl;
	return 0;
}


2.
数值转换为字符串

#include <string>
#include <sstream>
#include <iostream> 
using namespace std;
int main(){
    double a = 123.32;
    string res;
    stringstream ss;
    ss << a;
    ss >> res;//或者 res = ss.str();
    cout<<res; 
    return 0;
}


大神链接

五。string常用成员函数
assign函数:
str.assign(“ABC”)——清空字符串,并设置为 “ABC”
str.assign(“ABC”,2)——清空字符串,并设置为"AB",保留两个字符
str.assign(“ABC”,1,1)——清空字符串,设置为 “ABC” 中的从 位置1 开始,保留 1个 字符
str.assign(5,‘A’)——清空字符串,然后字符串设置为 5个 ‘A’
str.length()——求字符串长度
str.size()——和 length() 一样
str.capacity()——获取容量,包含了不用增加内存就能使用的字符数
str.reasize(10)——设置当前 str 的大小为10,若大小大与当前串的长度,\0 来填充
str.reasize(10,char c)——设置当前 str 的大小为10,若大小大与当前串的长度,字0符c 来填充
str.reserve(10)——设置str的容量 10,不会填充数据
str.swap(str1)——交换 str1 和 str 的字符串
str.push_back(‘A’)——在str末尾添加一个字符 ‘A’ ,参数必须是字符形式
str.append(“ABC”)——在str末尾添加一个字符串 “ABC”,参数必须是字符串形式
insert函数方法:

str.insert(2,3,‘A’)——在str下标为2的位置添加 3个 字符’A’
str.insert(2,“ABC”)——在str下标为2的位置添加 字符串 “ABC”
str.insert(2,“ABC”,1)——在str下标为2的位置添加 字符串 “ABC” 中 1个 字符
str.insert(2,“ABC”,1,1)——在str下标为2的位置添加 字符串 “ABC” 中从位置 1 开始的 1 个字符
注:上个函数参数中加粗的 1 ,可以是 string::npos,这时候最大值,从 位置1 开始后面的全部字符

str.insert( iterator pos, size_type count, CharT ch )——在 str 中,迭代器指向的 pos位置 插入 count个 字符 ch
s4.insert(++str1.begin(),2,‘a’); 结果:s4:ABCD -> AaaBCD

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.erase(2)——删除 下标2 的位置开始,之后的全删除
str.erase(2,1)——删除 下标2 的位置开始,之后的 1个 删除
str.clear()——删除 str 所有
str.replace(2,4,“abcd”)——从 下标2 的位置,替换 4个字节 ,为"abcd"
str.empty()——判空(空返回1,非空返回0)

string a="hello world";
    cout << a<<endl;
    a.assign("ABC");
    cout << a<<endl;
    a.assign("ABC",2);
    cout << a<<endl;
    a.assign("ABC",1,1);
    cout << a<<endl;
    a.assign(5,'A');
    cout << a<<endl;
    int d;
    d=a.length();
    cout <<d <<endl;
    d=a.size();
    cout <<d <<endl;
    string b="BBBBB";
    cout << a << " "<< b <<endl;
    a.swap(b);
    cout << a << " "<< b <<endl;
    a.push_back('B');
    cout << a<<endl;
    a.append("ABC");
    cout << a<<endl;
    a.insert(2,3,'A');
    cout << a<<endl;
    a.insert(2,"ABC");
    cout << a<<endl;
    a.insert(2,"ABC",1) ;
    cout << a<<endl;
    a.insert(2,"ABC",1,1);
    cout << a<<endl;
    a.erase(2);
    cout << a<<endl;
    a=b;
    a.erase(2,1);
    cout << a<<endl;
    a=b;
    a.clear();
    cout << a<<endl;
    a=b;
    a.replace(2,4,"abcd");
    cout << a<<endl;
    a=b;
    d=a.empty();
    cout << d <<endl;

结果:


转载:https://blog.csdn.net/weixin_43731005/article/details/105465495
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场