引用头文件


#include<string>
using std::string

1 初始化


string s1         //默认初始化,s1是一个空串
string s2(s1);  // s2是s1的副本 等价于 string s2=s1;
string s3(“value”); //s3是字面值“value”的副本,除了字面值最后的空字符除外
string s3=“value”    //同上
string s4(n,‘c’); //把s4初始化为由连续n个字符c组成的串

2 string的操作

string s;
os<<s           //将s写到输出流os中,返回os,例如
cout<<s;
is>>s          //从is中读取字符串赋给s,返回is,例如
cin>>s;

s.empty()   //s为空返回true,否则返回false
s.size()    //返回s中字符的个数
s[n]        //返回s中第n个字符的引用,位置n从0开始计起
s1+s2       //返回s1和s2链接后的结果
s1=s2       //用s2的副本
s1==s2      //等性对字母大小敏感
<,<=,>,>=   //利用字符在字典中的顺序进行比较,对字母的大小敏感
getline(is,s) //从is中读取一行赋给s,返回is 例如
getline<cin,s> /*不包含换行符 getline的参数是 一个输入流和一个string对象函数从给给定的输入流中读取字符串 

string 类型与其他类型相加

string s;
s = s+"Strive for excellence";
s = 'c' + s;
char ar[100] = " Cheer up";
s = s+ar;


3 额外的string 操作

substr 对字符串进行截取

basic_string substr( size_type pos = 0,
                     size_type count = npos ) const;
  /* pos 指定开始位置,count 指定截取数量 */


cpp reference

#include <string>
#include <iostream>
 
int main()
{
    std::string a = "0123456789abcdefghij";
 
    // count is npos, returns [pos, size())
    std::string sub1 = a.substr(10);
    std::cout << sub1 << '\n';
    // 默认第二个参数为npos,返回的子串是从位置10 到 结束

//...................................................
    // both pos and pos+count are within bounds, returns [pos, pos+count)
    std::string sub2 = a.substr(5, 3);
    std::cout << sub2 << '\n';
    // 截取从位置5 到 3 的子串

//...................................
    // pos is within bounds, pos+count is not, returns [pos, size()) 
    std::string sub4 = a.substr(a.size()-3, 50);
    std::cout << sub4 << '\n';
  如果 pos + count 大于string 的长度,到末尾就结束

//....................................

    try {
        // pos is out of bounds, throws
        std::string sub5 = a.substr(a.size()+3, 50);
        std::cout << sub5 << '\n';
    } catch(const std::out_of_range& e) {
        std::cout << "pos exceeds string size\n";
    }
}
// 如果第一个参数就已经大于string的长度,就会出现抛出异常

搜索操作

string 搜索操作的返回类型是string:: size_type,表示匹配位置的下标,
如果搜索失败,就返回string:: npos(值为-1,由于是size_type 无符号整数,npos 就是最大值)

s.find(args)   // 查找s中args第一次出现位置的下标
s.rfind(args)   //查找s中args 最后一次出现的下标
s.find_first_of(args) //查找s中args中任何一个元素在s中第一个出现的位置
s.find_last_of(args)  //查找s中args中任何一个元素在s中出现的最后一个位置
s.find_first_not_of(args) // 查找s第一个不在args 的字符的位置
s。find_last_not_of(args)  // 在s中查找最后一个不在args 的元素的位置
// args 的类型
c,pos // 从s中位置pos开始查找c。 pos默认为0
s2,pos  // 从s中位置pos开始查找s2。 pos 默认为0
cp,pos  // cp 为c字符串
cp,pos,n  /*从s中位置pos 开始查找指针cp指向的元素的数组的前n个字符. pos 和 n 没有默认值*/

 



数值转换

to_string(val) // 将数值转换为string

stoi(s,p,b)   //p 是size_t* 类型,默认为0,b 是进制(默认是十进制)
stol(s,p,b)
stoul(s,p,b);
stoll(s,p,b);
stoull(s,p,b);

stof(s,p)
stod(s,p)
stolf(s.p)

例如

string s = string("10");
cout<<stoll(s,0,10)<<endl;//10
//或者 cout<<stoll(s)<<endl;
cout<<soll(s,0,16)<<endl;//16