您的位置:首页 > 编程语言 > C语言/C++

C++中的标准库类型——string

2017-03-28 13:57 501 查看

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 对象中的第一个不同字符的比较结果。

4、字符序列查找
//arg的形式([c , pos]、[s2 , pos]、[cp , pos]、[cp , pos , n])
s
;//字符序列中第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的大写字母形式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: