分类
Level3

String

什么是string?

string是C++的STL (Standard Template Library即标准模板库)提供的字符串类,用于处理字符串相关的问题。

string schar s[]有什么区别?

(1)字符数组本质上还是数组,因此长度固定;string可以理解为长度不限的字符 串;

(2)   字符数组的系统定义的函数过少,导致操作不方便;string集成大量的系统函数, 方便操作;

(3)   字符数组由于本质是数组,因此不能进行比较运算以及+运算;string可以直接做比较和+运算。

没学过char s[]可以学string吗?

(1)char s[]由于使用的还是数组原理因此有利于同学对于数组本质的把握,以及提升程序驾驭能力;因此建议先学char s[],再学string会觉得比较轻松;

(2)有char s[]基础的同学,务必注意字符数组和string的区别,不要搞混了;

string的特点小结 string提供了字符串操作常见的函数,方便在具体问题中直接调用。

(1)   长度可以理解为不限定。

(2)   string可以做加法(相当于连接起来),可以比较大小!

(3)   string有很多系统定义函数,方便我们编程。

注意:将string理解成一个特殊的数组,字符数组。

C++标准库类型string 可变长的字符序列,比字符数组更加好用。是一种顺序表的结构,每个元素都是char类型的字符

  • 定义和初始化
string str1;
str1 = "hello";
string str2(str1);
string str3("world")
string str4(4, 'a'); // str4="aaaa";
str2 = str1;  //赋值,用str1内容副本替换掉str2的内容
  • 输入输出
cin>>str1;   //不带空格的一行
getline(cin, str1);  //带空格的一行
cout<<str1;  //输出字符串全部
printf(“%s”, s.c_str()); //不能直接用printf输出string,需要先转换
#include <iostream> //示例代码
#include <string>  //需要引入头文件string
using namespace std;
int main(){
    string s="hello world!"; 
    cout<<s<<endl;
    printf("%s\n",s.c_str()); //string转成char数组输出

    getline(cin, s);
    cout<<s<<endl;
    return 0;
}
  • empty与字符串长度
#include <iostream> 
#include <string> 
using namespace std;
int main(){
    string s1="hello world!", s2=""; 
    cout<<s1.empty()<<endl;  //判空,输出0
    cout<<s2.empty()<<endl;  //为空,输出1
    cout<<s2.size()<<endl;   //获取字符串长度,输出0
    cout<<s2.length()<<endl; //获取字符串长度,输出0
    return 0;
}
  • 遍历访问

string 对象的下标从 0 开始。如果 s 是一个 string 对象且 s 不空,则 s[0] 就是字符串的第一个字符, s[1] 就表示第二个字符,而 s[s.size() – 1] 则表示 s 的最后一个字符。

string s="hello world!";
for(int i=0;i<s.size();i++)    cout<<s[i];  //遍历字符串每个下标

C++11中提供了基于范围的for循环,可以用于字符串遍历
for(char c:s) cout<<c<<endl;  //输出s的每个字符
for(char &c:s) c='a';  //将s的每个字符替换成a
cout<<s<<endl;
  • 加法运算和比较运算
str1 = str1+str2;  //直接相加,就是将两个字符串连接在一起
str1 += str2;
str1.append(str2);
// 比较 <  <=  == != >  >=
// 以下返回值:
// 小于 0 表示当前的字符串小;
// 等于 0 表示两个字符串相等;
// 大于 0 表示另一个字符串小。
str1 > str2;
str1 == str2;

当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string:
string s1 = "hello", s2 = "world";
string s3 = s1 + ", " + s2 + '\n';
string s4 = s1 + ", ";	//正确:把一个string对象和有一个字面值相加
string s5 = "hello" +", "; //错误:两个运算对象都不是string
string s6 = s1 + ", " + "world"; //正确,每个加法运算都有一个运算符是string
string s7 = “hello” + ", " + s2;  //错误:不能把字面值直接相加,运算是从左到右进行的
字符类型判断函数:(非string函数)
isalpha(c): 判断c是否为字母
islower(c): 判断是否为小写
isupper(c): 判断是否为大写
isdigit(c): 判断是否为数字
说明:返回非0表示真,返回0表示假
字符类型转换函数:(非string函数)
tolower(c):字符转小写
toupper(c):字符转大写
说明:返回int ;
排序和倒序函数:(非string函数)
sort(起始地址,结束地址+1):数组升序排序
reverse(起始地址,结束地址+1):数组逆序
获取头尾指针
s.begin():获取字符串s的头位置(指针)
s.end():获取字符串S的尾位置(最后一个字符后面的位置)(指针)
string和数值转换
stoi(s):将字符串S转换为对应的整数
stoll(s):将字符串s转换为对应的long long
stof(s):将字符串s转换为对应的float
to_string(int n):将整数n转换为字符串
to_string(double a):将double型的a转为字符串,转换成的字符串小数点后有位

string

sstream

sscanf和sprintf