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

 

目录
相关文章
|
3月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
87 6
|
3天前
|
XML 网络协议 API
超级好用的C++实用库之服务包装类
通过本文对Boost.Asio、gRPC和Poco三个超级好用的C++服务包装类库的详细介绍,开发者可以根据自己的需求选择合适的库来简化开发工作,提高代码的效率和可维护性。每个库都有其独特的优势和适用场景,合理使用这些库可以极大地提升C++开发的生产力。
26 11
|
2月前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
85 5
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
65 2
|
3月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
90 5
|
3月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
33 1
|
3月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
82 1
|
3月前
|
C语言 C++
深度剖析C++string(中)
深度剖析C++string(中)
62 0
|
3月前
|
存储 编译器 程序员
深度剖析C++string(上篇)(2)
深度剖析C++string(上篇)(2)
49 0
|
3月前
|
存储 Linux C语言
深度剖析C++string(上篇)(1)
深度剖析C++string(上篇)(1)
35 0