开发者社区> wuyudong> 正文

C++标准库string类型

简介:
+关注继续查看

string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作。标准库string类型的目的就是满足对字符串的一般应用。

 本文地址:http://www.cnblogs.com/archimedes/p/cpp-string.html,转载请注明源地址。

引入头文件#include<string>

1、string对象的定义和初始化

string标准库支持几个构造函数,构造函数是一个特殊成员函数

一下是几种初试化string对象的方式

string s1;   //默认构造函数,s1为空串
string s2(s1);   //将s2初始化为s1的副本
string s3("value");   //将s3初始化为一个字符串字面值副本
string s4(n,'c');    //将s4初始化字符'c'的n个副本

构造string对象的其他方法:

举例如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    char *cp="Hiya";
    char carray[]="World!!!!";
    char nonull[]={'H','i'};
    string s1(cp);   //s1=="Hiya"
    string s2(carray,5);   //s2=="World"
    string s3(carray+5,4);   //s3=="!!!!"
    string s4(nonull);    //error
    string s5(carray,2);   //s5=="Hi"
    cout<<s1<<endl;
    cout<<s2<<endl;
    cout<<s3<<endl;
    cout<<s4<<endl;
    cout<<s5<<endl;
    cin.get();
    return 0;
}

注:s4的定义是错误的,调用这种形式的初始化,其参数必须是以空字符结束的数组,将不包含null的数组传递给此构造函数将导致编译器无法检测的严重错误

2、string对象的读写

使用标准输入输出操作符来读写string对象:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s;
    cin>>s;
    cout<<s<<endl;
    return 0;
}

string类型的输入输出操作符:

  • 读取并忽略开头所有的空白字符(如空格、换行符、制表符等)
  • 读取字符直至再次遇到空白字符,读取终止

我们可以把多个读操作或多个写操作放在一起:

string s1,s2;
cin>>s1>>s2;
cout<<s1<<s2<<endl;

(1)读入未知数目的的string对象

string的输入输出操作符也会返回所读的数据流,可以把输入操作作为判断条件:

int main()
{
    string word;
    while(cin>>word)
        cout<<word<<endl;
    return 0;
}

(2)、使用getline读取整行文本

string IO操作:getline,这个函数接受两个参数:一个输入流对象和一个string对象。getline函数从输入流的下一行读取,并保存读取内容到 string中,但不包括换行符。getline并不忽略换行符,遇到换行符,即便它是输入的第一个字符,getline也将停止读入并返回,这时 string参数将被置为空string

int main()
{
    string line;
    while(getline(cin,line))
        cout<<line<<endl;
    return 0;
}

3、string对象的操作

(1)string的size和empty操作

了解string对象是否为空是有用的:

string st("test");
if(st.size()==0) 
//or
if(st.empty())

(2)string::size_type类型

size()成员函数返回的是string::size_type类型的值,一种unsigned型,事实表明size_type存储的string长度是int所能存储的两倍

4、string对象的赋值

可以把一个string对象赋值给另一个string对象:

string s1,s2="test";
s1=s2;

先将s1占用的相关内存释放,分配给s1足够存放s2副本的内存空间,最后把s2中所有字符复制到新分配的内存空间

5、两个string对象相加

两个或多个string对象可以通过使用+或者+=连接起来

string s1("hello, ");
string s2("word\n");
string s3=s1+s2;
//or
s1+=s2;

6、和字符串字面值的连接

string s1("hello");
string s2("world");
string s3=s1+", "+s2+"\n";

7、从string对象获取字符

string类型通过下标操作符([])来访问string对象中的单个字符

8、string对象的容器特征

string类型还支持大多数顺序容器的操作,在某些方面,可将string类型视为字符容器。除了一些特殊操作,string类型提供与vector容器相同的操作

不同的是:它不支持以栈的方式操纵容器:在string类型中不能使用front、back和pop_back操作

string类型提供的操作意味着可将操纵vector对象的程序改为操纵string对象:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s("Hello!");
    string::iterator iter=s.begin();
    while(iter!=s.end())
        cout<<*iter++<<endl;
    cin.get();
    return 0;
}

与容器共有的string操作

string类型特有的版本

9、只适用于string类型的操作

string类型提供了容器类型不支持的其他几种操作:

1、substr操作

s.substr(pos,n) //返回一个string类型的字符串,它包含s中从下标pos开始的n个字符

s.substr(pos)  //返回一个string类型的字符串,它包含从下标pos开始到s末尾的所有字符

s.substr()   //返回s的副本

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s("hello world");
    string s2=s.substr(6,5);
    string s3=s.substr(6);
    cout<<s2<<endl;
    cout<<s3<<endl;
    cin.get();
    return 0;
}

2、append和replace函数

对于append操作,字符将添加在string对象的末尾,而replace函数则将这些字符插入到指定位置,从而替换string对象中一段已存在的字符

修改string对象的操作:

append和replace操作的参数:args

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
爱上c++的第十三天:STL标准库
哈哈哈,今天终于可以更新关于c++知识的最后一个部分的知识了,后面的话我应该就会更新一些关于python和机器学习还有数据结构方面的东西了,毕竟写这个东西也是很花时间的,希望大家多多支持,大家的认可,真的能让我大受鼓舞的,也是一直督促我前进的动力。
21 0
C++菜鸟学习笔记系列(8)——标准库类型vector
C++菜鸟学习笔记系列(8)——标准库类型vector
30 0
C++菜鸟学习笔记系列(7)——标准库类型string
C++菜鸟学习笔记系列(7)——标准库类型string
59 0
软件开发入门教程网之​​C++ 标准库​
软件开发入门教程网之​​C++ 标准库​
17 0
​​软件开发入门教程网之​​C++ 标准库
• 标准函数库: 这个库是由通用的、独立的、不属于任何类的函数组成的。函数库继承自 C 语言。 • 面向对象类库: 这个库是类及其相关函数的集合。 C++ 标准库包含了所有的 C 标准库,为了支持类型安全,做了一定的添加和修改。
23 0
C++ 标准库之 iomanip 、操作符 ios::fixed 以及 setprecision 使用的惨痛教训经验总结
C++ 标准库之 iomanip 、操作符 ios::fixed 以及 setprecision 使用的惨痛教训经验总结
114 0
【带你了解C++标准库为何在八大链表结构中选择了它】双向循环带头链表的实质性操作
【带你了解C++标准库为何在八大链表结构中选择了它】双向循环带头链表的实质性操作
40 0
关于 QtCreartor编写纯C++程序调用不到C++某些标准库和枚举以及运行错误 的解决方法
关于 QtCreartor编写纯C++程序调用不到C++某些标准库和枚举以及运行错误 的解决方法
241 0
C++ STL开发温习与总结(五): 5.C++标准库简介
C++ STL开发温习与总结(五): 5.C++标准库简介
77 0
【Example】C++ 标准库智能指针 unique_ptr 与 shared_ptr
在现代 C + + 编程中,标准库包含智能指针,智能指针可处理对其拥有的内存的分配和删除,这些指针用于帮助确保程序不会出现内存和资源泄漏,并具有异常安全。C 样式编程的一个主要 bug 类型是内存泄漏。 泄漏通常是由于为分配的内存的调用失败引起的 delete new。 现代 C++ 强调“资源获取即初始化”(RAII) 原则。 其理念很简单。 资源(堆内存、文件句柄、套接字等)应由对象“拥有”。 该对象在其构造函数中创建或接收新分配的资源,并在其析构函数中将此资源删除。 RAII 原则可确保当所属对象超出范围时,所有资源都能正确返回到操作系统。 --Microsoft Docs
75 0
+关注
wuyudong
我的个人博客地址:http://wuyudong.com/
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
继承与功能组合
立即下载
对象的生命期管理
立即下载
移动与复制
立即下载