C++中的字符串类型string
在C++中存储和使用字符串的方式不止字符数组,C++标准库当中将字符类型封装成< string >头文件,为字符串的处理和字符串问题解决提供了更高效的方法。
优点:
①不用考虑越界的问题
因为在定义string类型中,计算机会根据你输入的字符数来分配空间,所以在使用string字符串类型时,无需像定义字符数组时那样,需要提前规定数组空间大小。
②更加丰富的功能函数
在< string >标准库中内置了很多功能的函数,在使用过程中可以直接调用功能函数到程序中,大大减少了代码编写的代码量和时间。
③可操作性更强
string类型变量在程序中存储的量是字符串,我们通常认为字符串和字符以及其他常量有一定的区别,但是在string中,在使用的过程中无需去为他作区分,只需要把他看作是一个普通的变量中存储的常量即可,给编程带来的更高的可操作性。
string类型定义
在前面介绍中提到,string类型包含于< string >头文件中,所以在使用string类型或函数时一定要先导入头文件;
# include< string >//string类型字符串头文件
1. string s; //生成一个空字符串s
2. string s(str) //拷贝构造函数 生成str的复制品
//str系统内置
3. string s(str,stridx) //将字符串str内“始于位置stridx”(从stridx开始往后所有)的部分当作字符串的初值
/*例:*/ string m="are you ok?";
string s(m,4);//s结果为:you ok?
4. string s(str,stridx,strlen) //将字符串str内“始于stridx且长度顶多strlen”(从stridx开始往后strlen个字符)的部分作为字符串的初值
/*例:*/ string m="are you ok?";
string s(m,4,2);//s结果为:yo
5. string s(cstr) //将cstr字符串作为s的初值
/*例:*/ string m="are you ok?";
string s(m);//s结果为:are you ok?
6. string s(num,c) //生成一个字符串,包含num个c字符-初始化前面num个元素
/*例:*/ string s(3,'a');//s结果为:aaa
7. string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值
/*例:*/ string m(s.begin(),s.end());
//将s字符串作为m的初始值
string m(数量,字符);
//也可填入需要数量的字符作为初始值,如:string m(2,'a'); m字符串中为2个字符'a'
8. s.~string() or s=string()//销毁所有字符,释放内存
//将字符串清空
string操作
在常用的int、char、float 类型中,可以对该类型的变量进行基本的运算操作,那么我们说把string类型变量看作是一个和以上常用类型普通变量来进行使用,那么同样的在这里面我们同样的可以对他进行基础的操作。
常用操作:
比较:>,>=,<,<=,==,!=
连接:+、+=
1.assign()函数:为字符串赋值
//用法1:
k=assign(n);//等同于k=n
//注意a:n可以换为一个字符串,如:k=assign("are you") 下同
//将字符串n的值赋给k
//用法2:
k=assign(n,1,3);
//将字符串n下标为1的位置到下标为3的位置添加到k中 /但不包含3下标的值/
//k的结果为;ow
//用法3:
k=assign(10,'c');
//给k10个相同的字符c
2.swap()函数:交换字符串
//用法:
swap(n,m);
//将n与m字符串中的值互换
3.append 与 push_back()函数:添加元素到字符串末尾
等同于+=操作
//用法:
n.append(m);
//将m字符串添加到n字符串末尾
n.append(m,1,3);
//将m字符串从下标为1的位置到下标为3的位置添加到n末尾
n.push_back('b');//注意,push_back()函数只能添加单个字符
//将字符b添加到末尾
4.insert()函数:插入字符
//用法:
n.insert(1,m);
//在原字符串n下标为1的位置插入字符串m
n.insert(4,5,'w'); or char c='w'; n.insert(4,5,c);
//在原字符串n的下标为4的位置插入5个字符‘w’
n.insert(0,n,1,3);
//在原字符串n从下标为1的位置开始数3个字符,插入原串的下标为0的字符h前
5.erase()函数;删除字符函数
//用法
n.erase(5);
//将字符串n从下标为5的位置开始删除,直到结尾
n.erase(5,3);
//将字符串n从下标为5的位置开始,删除后3个字符
6.clear()函数:清空字符串,即删除全部
//用法:
n.clear();
//清空n字符串
7. replace()函数:替换字符
//用法:
n.replace(2,2,m);
//将n字符串从下标为2开始后两位,替换为m字符串
n.replace(2,2,m,1,4);//m可以为字符数组:即char m[]或""类型常量
//将n字符串从下标为2开始后两位替换为m字符串下标为1开始往后4个字符
//即:将" w"替换为"0lle"
n.replace(2,2,3,'c');
//将n字符串下标为2开始往后两位字符,替换为3个‘c’
8. size(),length()函数:求字符串长度,返回字符串中有效字符数量
//用法:
//该函数返回的是一个整型常量
int len,len1;
len=n.size();
len1=m.length();
//len中存的是n字符串长度
//len1中存的是m字符串长度
9. max_size() //返回字符的可能最大个数
//用法:
n.max_size();
//返回string类型n字符串最大容量
10. empty() //判断字符串是否为空,是空时返回ture,不是空时返回false
//用法
n.empty();
//返回值为0 or 1
11. capacity() //返回重新分配之前的字符容量
13. [ ], at() //存取单一字符
//用法
char ch;
ch=n.at(2);//将n字符串中下标为2的字符赋值给ch
cout<<n.at(2);//输出n字符串中下标为2的字符
14. >>,getline() //从stream读取某值 (输入一个字符串)
//用法
cin>>n//普通输入,以空格或回车或\0作为结束
getline(cin,n);//输入一个字符串,能够输入空格\0,以回车作为结束
15. << //将某值写入stream(输出一个字符串)
//用法:
cout<<n;
16. copy() //将某值赋值为一个C_string
//用法:
n.copy(lin,5,2);//注意:这里的lin是char 数组;
//将n字符串中下标为2开始往后5个字符放到lin字符数组中
17. c_str() //将内容以C_string返回
//用法
char c[20];
string s=“1234”;
strcpy(c,s.c_str());
//将s字符串变量存放到c字符数组当中
//c_str()返回的是一个临时指针
18. data() //将内容以字符数组形式返回
19. substr() //返回某个子字符串
//用法
string a=n.substr();//默认时的长度为从开始位置到尾
string b=n.substr(5);//获得字符串s中 从第5位开始到尾的字符串
string c=n.substr(5,3);//获得字符串s中 从第5位开始的长度为3的字符串
20. 查找
1. begin()//begin()函数返回一个迭代器,指向字符串的第一个元素
2. end()//end()函数返回一个迭代器,指向字符串的末尾(最后一个字符的下一个位置).
3. rbegin()//返回一个逆向迭代器,指向字符串的最后一个字符。
4. rend()//函数返回一个逆向迭代器,指向的开头(第一个字符的前一个位置)
5. find() //在字符串s1中查找s2;(s1.find(s2))返回该子串在s1中第一次出现的位置
6. find_firts_of()//在字符串s1中查找s2,s1.find_firts_of(s2)返回字符串中**任意字符**首次出现的位置
欢迎大家留言提问~~~