标准库类型string
标准库类型string表示可变长的字符序列,使用前先加头文件
#include<string>
using std::string
1、定义和初始化string对象
string s1; //默认初始化,s1是一个空字符串
string s2=s1; //s2是s1的副本//拷贝初始化
string s2(s1); //s2是s1的副本//直接初始化
string s3="hiya"; //s3是该字符串字面值的副本//拷贝初始化
string s3("hiya"); //s3是该字符串字面值的副本//直接初始化
string s4=(10,'c'); //s4的内容是cccccccccc//拷贝初始化
string s4(10,'c'); //s4的内容是cccccccccc//直接初始化
2、string对象上的操作
操作 | 说明 |
---|
os<<s/cout<<s | 将s写到输出流os当中,返回os |
is>>s/cin>>s | 从输入流is中读取字符串赋给s,字符串以空白分隔,返回is |
getline(is,s)//getline(cin,s) | 从is中读取一行赋给s,返回is |
s.empty() | s为空返回true,否则返回false |
s.size() | 返回s中字符的个数 |
s[n] | 返回s中第n个字符的引用,位置n从0计起 |
s1+s2 | 返回s1和s2连接后的结果 |
s1=s2 | 用s2的副本代替s1中原来的字符 |
s1==s2 | 如果s1和s2中所含的字符完全一样,则它们相等,返回true;否则返回false |
s1!=s2 | string对象相等性对字母的大小写敏感 |
<,<=,>,>= | 利用字符在字典中的顺序进行比较,且对字母的大小写敏感 |
!!注意
- 在将标准输入的内容读取到s中时(cin>>s;),string对象会自动忽略开头的空白(空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇到下一处空白为止。
string s1;
cin>>s1;
cout<<s1<<endl;
string s1,s2;
cin>>s1>>s2;
cout<<s1<<s2<<endl;
- getline读取一行,以换行符结束,但换行符是被读取进来了,在把所读内容存到string对象中时不存换行符。
- size函数返回string对象的长度,返回类型实际上时string::size_type类型(无符号类型的值)能够存放下任何string对象的大小。无符号数在与有符号数比较时,如s.size()<n(n是int型负值)这个判断结果是true。尽量避免有无符号混用。
- string对象相加时要保证’+'号两侧至少有一个string对象
string s1="hello",s2="world";
string s3=s1+","+s2;
string s4=s1+","+"world";
3、处理string对象中的字符
cctype头文件中的函数 | 说明(cctype也就是c语言中的ctype.h) |
---|
isalnum( c ) | 当c是字母或数字是为true |
isalpha( c ) | 当c是字母是为true |
iscntrl( c ) | 当c是控制字符是为true |
isdigit( c ) | 当c是数字时为true |
isgraph( c ) | 当c不是空格但可以打印时为true |
islower( c ) | 当c是小写字母时为true |
isprint( c ) | 当c时可打印字符时为true(即c时空格或c具有可视形式) |
ispunct( c ) | 当c是标点符号时为true(即c不是控制字符、数字、字母、可打印空白中的一种) |
isspace( c ) | 当c是空白时为true(即c是空格、横向制表符、纵向制表符、回车符、换行符、进纸符的一种) |
isupper( c ) | 当c是大写字母是为true |
isxdigit( c ) | 当c是十六进制数字时为true |
tolower( c ) | 如果c是大写字母,输出对应的小写字母;否则原样输出c |
toupper( c ) | 如果c是小写字母,输出对应的大写字母;否则原样输出c |
string s("hello,world");
for(auto c : s){
if(isupper(c)){
}
}
C标准库String函数
函数 | 说明 |
---|
strlen( p ) | 返回p的长度,空字符不计算在内(’\0’) |
strcmp(p1,p2) | 比较p1和p2是否相等,p1==p2返回0;p1>p2返回正值;p1<p2返回负值 |
strcat(p1,p2) | 将p2附加到p1之后,返回p1 |
strcpy(p1,p2) | 将p2拷贝给p1,返回p1 |
char ca[]={'c','+','+'};
cout<<strlen(ca)<<endl;
const char ca1[]="a string example";
const char ca2[]="a different string";
if(ca1<ca2){}
if(strcmp(ca1,ca2) < 0)
与旧代码的接口
string s("hello world")
char *str =s;
const char *str = s.c_str();