导入头文件 #include <string>
,标准库string类型表示可变长的字符序列。
1、定义和初始化
string s1; //默认初始化,s1为空串
string s2(s1); //将s2初始化为s1的一个副本
string s2 = s1; //同上
string s3("val"); //将s3初始化一个字符串面值副本
string s3 = "val"; //同上
string s4(n,'c'); //将s4 初始化为由连续n个字符'c'组成的串
2、string对象的操作
os<<s; //将s写入到输出流os中,返回os对象
is>>s; //从is中读取字符串赋值给s,返回is对象
getline(is,s); //从is中读取一行赋值给s,返回is
s.empty() //为空返回true,否则返回false
s.size() //返回字符串中字符个数
+,=,==,!,<,<=,>,>= //连接、比较操作
在读操作中需要注意:
(1)cin>>s; 自动忽略开头的空白(空格符、换行符、制表符等),只读取有效字符直到遇到下一处空白。
(2)getline(cin,s); 从给定的输入流中读取字符,直到遇到换行(此时换行符也被读进来)。将所读的内容存入string对象中(此时不存换行符)。
(3)getline(cin,s,’a’); 读入操作直到‘a’结束,其中任何字符包括’\n’都能够读入。
s.size()的返回类型
size函数的返回类型是string::size_type。这种类型表示的是一个无符号类型的值,并且能够存放下任何string对象的大小。
3、string对象中字符的处理(头文件cctype)
isalnum(c) //如果c是字母或数字,返回 true
isalpha(c) //如果c是字母,返回true
iscntrl(c) //c是控制符,返回true
isdigit(c) //如果c是数组,返回true
isgraph(c) //如果c不是空格,则可打印,,则为true
islower(c) //如果c是小写字母,则为true
isupper(c) //如果c是大写字符,则为true
isprint(c) //如果c是可打印的字符,则为true
ispunct(c) //如果c是标点符号,则为true
isspace(c) //如果c是空白字符,则为true
isxdigit(c) //如果c是十六进制数,则为true
tolower(c) //如果c是大写字符,则返回其小写字母,否则直接返回c
toupper(c) //跟tolower相反
4、string对象中一些函数
(1)插入
s.insert(int n,char p); //把字符串p插入到n的位置
s.insert(p,n,t); //迭代器p元素之前插入n个t的副本
s.insert(p,b,e); //迭代器p元素之前插入迭代器b到e之间的所有元素
s.insert(p,s2,poe2,len); //在下标p之前插入s2下标从poe2开始长度为len的元素
s.insert(pos,cp,len); //下标pos之前插入cp数组的前len个元素。
(2)替换
s.assign(b,e); //用迭代器b到e范围内的元素替换s
s.assign(n,t); //用n个t的副本替换s
a.assign(s1,pos2,len);//从s1的下标pos2开始连续替换len个。
s.replace ( 3 , 3 , " good " ) ; //从第三个起连续三个替换为good
(3)截取字串
s.substr(i,j) //截取s串中从i到j的子串
(4)删除
s.erase( it )||s.erase ( first , second ) ; //删除迭代器或迭代器范围的字符
(5)其他函数
s.find ( " cat " ) ; //超找第一个出现的字符串”cat“,返回其下标值,查不到返回 4294967295,也可查找字符;
s.append(args); //将args接到s的后面
s.compare ( " good " ) ; //s与”good“比较相等返回0,比"good"大返回1,小则返回-1;
reverse ( s.begin(), s.end () ); //反向排序函数,即字符串反转函数
5、string对象与数值的相互转换
sstream头文件包含ostringstream、istringstream、stringstream这三个子类。
- istringstream类用于执行C++风格的串流的输入操作。
- ostringstream类用于执行C风格的串流的输出操作。
- strstream类同时可以支持C风格的串流的输入输出操作。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
//c++方法:将数值转换为string
string convert_to_string(double x)
{
ostringstream o;
if(o << x)
return o.str();
return "conversion error";
}
//c++方法,将string转化为数值
double convert_from_string(const string &s)
{
istringstream i(s);
double x;
if(i >> x)
return x;
return 0.0;
}
int main(int argc,char *argv[])
{
string cc=convert_to_string(1976);
cout<<cc<<endl;
string dd="115165";
int p=convert_from_string(dd)+2;
cout<<p<<endl;
return 0;
}