string
标准库类型string是一种可变长的字符序列。string定义在std命名空间中。在使用string前,需要:
#include<string>
using std::string;
一、声明与定义
string name;
二、初始化
string s1; // 默认初始化,空序列
string s2(s1);
string s3 = s1;
string s4 ("aaa"); // 字面值初始化最后存在的一个空字符会被丢弃
string s5 = "aaa";
string s6 (4 , 'a'); //由4个a组成字符序列进行初始化
string s( cp, n); //s是cp指向的数组中前n个字符的拷贝,此数组至少包含n个字符
string s(s2 , pos2); // s是string s2从下标pos2开始的字符的拷贝,若是pos2>s2.size(),则此行为为定义。
string s(s2 , pos2 , len2);//s是从s2下标pos2开始的len2个字符的拷贝。
三、方法
1、字符序列的读写
os << s; //将s写到输入流当中,返回os,这样意味着可以多个s可以连续输出,即: os << s1 << s2;
is >> s; //将s读到字符序列当中,字符序列之间以空白作为分隔,返回is。这样意味着可以多个s可以连续输入,即: is >> s1 >> s2;
getline( is , s); //读取一行,保留空白,直到遇到换行符,注意换行符也是一个空白,会被保留
在执行读取的操作中,string对象会自动的忽略开头的空白(空格符、换行符、制表符等)并从第一个非空白的字符读取,直到遇到下一个空白。
2、empty和size操作
s.empty();//根据string对象是否为空返回一个bool类型的值
s.size();//返回string对象的长度,即其中字符的个数
关于 string::size_type 类型: size 函数返回的是这种类型,并不是一般的 int 或者 unsigned 类型。它是一个无符号类型的值而且足够放下任何 string 对象的大小。对于表达式中存在无符号数需要警惕! 可以使用关键字 auto 或者 decltype 来推断数据的类型。
3、大小比较
//利用字符在字典中的顺序进行比较,并且对大小写敏感
s1 == s2;
s1 != s2;
s1 <= s2;
s1 < s2;
s1 >= s2;
s1 > s2;
s.compare(args);//具有多种参数形式
关于字符序列的大小比较:
a)如果两个 string 对象的长度不同,而且较短的 string 对象的每个字符都与较长的 string 对象对应位置上的字符相同,就认为较短 string 对象小于较长 string 对象。即:如果一个是另一个的子集(该说法可能不准确),则认为是一个小于另一个。
b)如果两个 string 对象在某些位置上不一样,则 string 对象的比较结果其实就是 string 对象中的第一个不同字符的比较结果。
//arg的形式([c , pos]、[s2 , pos]、[cp , pos]、[cp , pos , n])
s[n];//字符序列中第n个字
s.find(args);//查找s中args第一次出现的位置
s.rfind(args);//查找s中args最后一次出现的位置
s.find_first_of(args);//在s中查找args中任何一个字符第一次出现的位置
s.find_last_of(args);//在s中查找args中任一字符最后一次出现的位置
s.find_first_not_of(args);//在s中查找第一个不在args中的字符
s.find_last_not_of(args);//在s中查找最后一个不再args中的字符
5、修改
//args的形式:[str],[str,pos,len],[cp,len],[cp],[n,c],[b,e],[初始化列表]
s1 = s2;//赋值
s1 + s2;//两个字符序列可以直接相加
s.insert(pos , args);//在pos之前插入args指定的字符
s.erase(pos , len);//删除从pos开始的len个字符
s.assign(args);//将s中的字符替换为args指定的字符
s.append(args);//在s的末尾追加args
s.replace(range , args);//删除s中范围range内的字符,替换为args指定的字符
修改操作中的操作很多函数是可以重载的。函数的返回方式依赖于输入参数的设定,并不是所有的函数可以使用所有的参数方式。
6、字符处理
//定义在头文件cctype中
isalnum(c);//当c是字母或者数字时返回真
isalpha(c);//当c是字母时返回真
isdigit(c);//当c为数字时返回真
isxdigit(c);//当c为十六进制时为真
iscntrl(c);//当c是控制字符时返回真
isgraph(c);//当c不是空格但可以打印时返回真
isprint(c);//当c是可以打印字符时返回真(即c是空格或者有可视形式)
islower(c);//当c是小写字母时返回真
isupper(c);//当c是大写字母时返回真
ispunct(c);//当c是标点符号时返回真
isspace(c);//当c是空白时返回真
tolower(c);//输出c的小写字母形式
toupper(c);//输出c的大写字母形式