C++基础(13):字符串类型
上次在C++基础(12):字符类型中,介绍了使用字符数组来存储字符串,按照数组进行赋值,本次的字符串类型是指将字符串看作一个整体,进行输入和输出操作;但这样会相应的出现许多问题,比如,数组长度不能变化,不能直接复制,有数组越界的风险,C++提供了一些更好的工具,使用string数据类型来处理字符串。
字符串的输入
1、使用scanf()
语句:
|
|
注意:
1、scanf()语句中,字符串变量名“s”前,不加取地址符“&”。因为“s”是字符数组名,在C语言中,在C语言中数组名就代表该数组的起始地址;
2、系统会自动在输入的字符串常量后,自动添加'\0’标志,因此输入时,仅输入字符串的内容即可。
3、输入多个字符串时,字符串之间以空格分隔。
2、使用cin
|
|
3、不再使用gets()函数
有一些老版本的书中,仍使用gets()函数读入字符串,这容易引起数组越界的问题,并且在C++11标准中已经将此函数删除了。
字符串的输出
与字符串输入相对应,输出可以使用printf()、cout、puts()向屏幕输出一个字符串。在上面程序中已有示例,不再赘述。
值得注意的是:puts语句输出一个字符串和一个换行符。对于已经声明过的字符串s, printf("%s\n" , a)和puts(a)是等价的。
使用string类型来处理字符串
使用string类型需要使用头文件string,有以下常用方法:
- string s :定义一个名字为s的字符串变量。
- s.size()或者s.length() :得到字符串s的长度。
- s +=str或者s.append(str) :在字符串s后面拼接字符串str。
- s < str :比较字符串s的字典序是否在字符串str的字典序之前。
- s.substr(pos,len) :截取字符串s,从pos个位置开始len个字符,并返回这个字符串。
- s.insert(pos,len) :在字符串s的第pos个字符之前,插入字符串str,并返回这个字符串。
- s.find(str,[pos]) :在字符串s中从第pos个字符开始寻找str,并返回位置,如果找不到返回-1。如果省略pos,则表示从头开始查找。
string类型还可以直接赋值常量,也可以互相赋值,但是,字符数组不能直接赋值。
|
|
string类型和字符数组还可以相互转换,如下:
|
|
头文件string和cstring的区别
cstring代表的是string.h,string.h是C++标准化(1998年)以前的C++库文件,在标准化过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个"c"前缀并且去掉了.h的后缀名,所以string.h头文件成了cstring头文件。但是其实现却是相同的或是兼容以前的。
string是真正的C++头文件,包含std::string的定义,属于STL范畴。之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,用== 进行比较,用+ 做串联(前面已经提到过)。我们可以把string看成是C++的基本数据类型。
cstring头文件不可以定义string s变量,string头文件可以定义string s变量。
现在,NOI的所有活动中,采用C++14标准,所以,在处理字符串时,建议使用string头文件,不建议使用cstring。
- 原文作者:图图爸爸
- 原文链接:https://www.tubacode.com/post/cpp-string.html
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。