C++ string

标准类型String

1、直接初始化和拷贝初始化(复制初始化)的区别

直接初始化直接调用与实参匹配的构造函数

复制初始化总是调用复制构造函数,复制初始化首先使用指定构造函数创建一个临时对象,让后用复制构造函数将那个临时对象复制正在创建的对象。所以当复制构造函数被声明为私有时,所用的复制初始化都不能使用。

2、初始化string对象的方式
a)string s1          默认初始化,s1是一个空串
b)string s2(s1)       s2是s1 的副本
c)string s2 = s1      同上
d)string s3(“value”)   s3 是字面值 value的副本 (直接初始化)、
e)string s3 = “value”  拷贝初始化
f)string s4(n, ‘c’)     由连续n个c组成的字符串(直接初始化)

3、string对象的操作
a)cout << s;
b)cin >> s;
c)getline(cin, s);      读取一行
d)s.empty();
e)s.size();
f)s[n];
g)s1 + s2            返回s1和s2连接后的结果
h)s1 == s2;
i)s1 = s2;
j)s1 != s2;
k)<、<=、>、>=

4、string s; cin >> s;
   这段程序首先定义一个名为s的空string,然后将标准输入的内容读取到s中。在执行读取操作时,string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,知道遇到下一处空白为。“       hello  ”,输出将是hello,输出结果没有任何空格。

5、表达式中混用了带符号数和无符号数将可能产生意想不到的结果。例如,假设n是一个具有复制的int,则表达式s.size() < n 的判断结果几乎肯定是true。这是因为负值n会自动地转换成一个比较大的无符号值。如果一条表达式中已经有了size() 函数就不要使用int了,这样可以避免混用int 和 unsigned 可能带来的问题。

6、字面值和string对象相加
当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个假发运算符(+)的两侧的运算对象至少有一个是string。

7、<cstdio> 中的c表示这是一个属于C语言标准库的头文件。

8、cctype 头文件中的函数
a)isalnum(c)     当c是字母或数字时为真
b)Isalpha(c)      当c是字母时为真
c)iscntrl(c)      当c是控制字符时为真
d)isdigit(c)       当c是数字时为真
e)isgraph(c)      当c不是空格但可以打印室为真
f)islower(c)      当c是小写字母时为真
g)isprint(c)       当c是可打印字符时为真
h)ispunct(c)      当c是标点符号时为真
i)isspace(c)      当c是空白时为真
j)isupper(c)      当c是大写字母时为真
k)isxdigit(c)      当c是十六进制数字时为真
l)tolower(c)      如果c是大写字母,输出对应的小写字母;否则原样输出c
m)toupper(c)      如果c是小写字母,输出对应的大写字母;否则原样输出c

9、加引用可以更改字符串中的字符
for (auto c : str)  cout << c << endl;

for (auto &c : str)  c = toupper(c); cout << str << endl;

10、构造string的其他方法
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是string s2从下表pos2开始len2个字符的拷贝。若pos2>s2.size(),构造函数的行为未定义。不管len2的值是多少,构造函数至多拷贝s2.size()-pos2个字符。

11、substr操作,字符串截取 ,返回一个string的一部分或全部的拷贝。
s.substr(pos, n)   返回一个string,包含s中从pos开始的n个字符的拷贝。pos的默认值为0,n的默认值为s.size()-pos,即拷贝从pos开始的所有字符。
12、insert、erase、append、replace
s.insert(pos, args);  在pos之前插入args指定的字符。Pos可以是一个下表或一个迭代器。接受下表的版本返回一个指向s的引用;接受迭代器的版本返回指向第一个插入字符的迭代器。
s.erase(pos, len);   删除从位置pos开始的len个字符。如果len被省略,则删除从pos开始直至s末尾的所有字符。返回一个指向s的引用
s.assign(args)     将s中的字符替换为args指定的字符。返回一个指向s的引用
s.append(args)    将args追加到s。返回一个指向s的引用。
s.replace(range,args)   删除s中范围rang内的字符,替换为args指定的字符。rang或者是一个下表和一个长度,或者是一对指向s的迭代器。返回一个指向s的引用。
13、string搜索操作,搜索不到返回-1
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中的字符


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值