C++ Primer(第五版)学习笔记_4_标准模板库string(1)

C++ Primer(第五版)学习笔记_4_标准模板库string(1)

1、创建string对象

创建一个空字符串,其长度为0

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    string s;
    cout << s.length() << endl;
    return 0;
}

运行结果:

0

2、给string对象赋值

赋值一般有两种方式。

(1)直接给字符串对象赋值

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    string s;
    s = "hello, C++ STL.";
    cout << s << endl;
    return 0;
}

运行结果:

hello, C++ STL.

(2)更常用的方法是,把字符指针赋值给一个字符串对象

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    string s1;
    char ss[5000];
    //scanf的输入速度比cin快的多
    //scanf是C语言的函数,不支持string对象
    scanf("%s", &ss);
    s1 = ss;
    cout << s1 << endl;

    string s2;
    cin >> s2;
    cout << s2 << endl;
    return 0;
}

运行结果:

scanf,string

scanf,string

cin,string

cin,string

3、从string对象尾部添加字符

在string对象的尾部添加一个字符(char),采用“+”操作符即可。

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    string s;
    s = s + 'a';
    s = s + 'b';
    s = s + 'c';
    cout << s << endl;
    return 0;
}

运行结果:

abc

4、从string对象尾部追加字符串

从尾部追加的方式有两种。

(1)直接采用“+”操作符

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    string s;
    s = s + "abc";
    s = s + "123";
    cout << s << endl;
    return 0;
}

运行结果:

abc123

(2)采用append()方法

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    string s;
    s.append("abc");
    s.append("123");
    cout << s << endl;
    return 0;
}

运行结果:

abc123

5、给string对象插入字符

可以使用insert()方法把一个字符插入到迭代器位置之前

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    string s;
    s = "123456";
    s.insert(s.begin() + 1, 'p');
    cout << s << endl;
    return 0;
}

运行结果:

1p23456

6、访问string对象的元素

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    string s;
    s = "abc123456";
    cout << s[0] << endl;
    cout << s[0] - 'a' << endl;
    return 0;
}

运行结果:

a

0

7、删除string对象的元素

(1)清空一个字符串,则直接给它赋空字符串即可。也可以用s.clear()方法实现。

(2)使用erase()方法删除迭代器所指的那个元素或一个区间中的所有元素。

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    string s;
    s = "abc123456";
    //删除第3个元素,元素位置从0开始计数
    s.erase(s.begin() + 3);
    cout << s << endl;
    //删除0~4左闭右开区间的所有元素,[0, 4)
    s.erase(s.begin(), s.begin() + 4);
    cout << s << endl;
    s = "";
    cout << s.length() << endl;
    return 0;
}

运行结果:

abc23456

3456

0

8、返回string对象的长度

采用length()方法或则size()方法都可以返回字符串的长度;采用empty()方法,可返回字符串是否为空,如果字符串为空,返回1;否则,返回0。

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    string s;
    s = "abc123456";
    cout << s.length() << endl;
    cout << s.size() << endl;
    s.clear();
    cout << s.empty() << endl;
    return 0;
}

运行结果:

9

9

1

9、替换string对象的字符

使用replace()方法可以很方便地替换string对象中的字符

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    string s;
    s = "abc123456";
    //从第3个开始,将连续的3个字符替换为"good"
    //即将"1234"替换为good
    s.replace(3, 4, "good");
    cout << s << endl;
    return 0;
}

运行结果:

abcgood56

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 21:05:02

C++ Primer(第五版)学习笔记_4_标准模板库string(1)的相关文章

C++ Primer(第五版)学习笔记_5_标准模板库string(2)

C++ Primer(第五版)学习笔记_5_标准模板库string(2) 10.搜索string对象的元素或子串 采用find()方法可查找字符串中的第一个字符元素(char, 用单引号界定)或者子串(用双引号界定):如果查到,则返回下标值(从0开始计数),如果查不到,则返回一个很大的数string:npos(即:4294967295). #include <iostream> #include <stdio.h> #include <string> using nam

C++ Primer(第五版)学习笔记_9_标准模板库_multimap多重映照容器

C++ Primer(第五版)学习笔记_9_标准模板库_multimap多重映照容器 多重映照容器multimap与map结构基本相同,但由于重复键值存在,所以multimap的元素插入.删除.查找都与map的方法不相同. 1.multimap对象创建.元素插入 插入元素时,需要使用insert()方法和类似pair<string,double>("Jack", 300.5)的元素结构.可以看到,重复的元素是按照插入的先后顺序排序的. #include <iostre

C++ Primer(第五版)学习笔记_3_标准模板库vector(2)

C++ Primer(第五版)学习笔记_3_标准模板库vector(2) 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 6.元素的插入 insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置. 要注意的是,insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标. #include <iostream> #include <vector> using namespa

C++ Primer(第五版)学习笔记_1_标准模板库--快速入门

C++ Primer(第五版)学习笔记_1_标准模板库--快速入门 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 标准模板库(STL)提供三种类型的组件:容器.迭代器和算法,他们都支持泛型程序设计标准. 容器主要有两类:顺序容器和关联容器.顺序容器(vector.list.deque和string等)是一系列元素的有序集合.关联容器(set.multiset.map和multimap)包含查找元素的键值. 迭代器的作用是遍历容器. STL算法库包含四类算法:排序算法.不可变序算法.变序性算法

C++ Primer(第五版)学习笔记_2_标准模板库vector(1)

C++ Primer(第五版)学习笔记_2_标准模板库vector(1) 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 向量容器vector不但能像数组一样进行随机访问,还能在尾部插入元素,完全可以替代数组. 值得注意的是,vector具有内存自动管理的功能,对于元素的插入和删除,可以动态调整所占的内存空间. 容器vector的下标是从0开始的,如果vector容器的大小是n,则元素下标为0~n-1,这和数组的一样的.不一样的是,vector可以随时调整其大小. vector重要的方法有三个

C++ Primer(第五版)学习笔记_6_标准模板库_set集合容器

C++ Primer(第五版)学习笔记_6_标准模板库_set集合容器 Set集合容器实现了红黑树(Red-BlackTree)的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排序,把该元素放到适当的位置. (1)确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值: (2)另外,还得确保根节点左子树的高度与右子树的高度相等.这样,二叉树的高度最小,从而检索速度最快. 平衡二叉检索树的检索使用中序遍历算法,检索效率高.默认情况下,将键值由小到大遍历. 对于s

C++ Primer(第五版)学习笔记_8_标准模板库_map映照容器

C++ Primer(第五版)学习笔记_8_标准模板库_map映照容器 map映照容器的元素数据是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系. map映照容器的数据结构也是采用红黑树来实现的. 1.map创建.元素插入和遍历访问 #include <iostream> #include <stdio.h> #include <vector> #include <map> #include <string> using n

C++ Primer(第五版)学习笔记_7_标准模板库_multiset多重集合容器

C++ Primer(第五版)学习笔记_7_标准模板库_multiset多重集合容器 多重集合容器multiset与set一样,也是使用红黑树来组织元素数据的,唯一不用的是,multiset允许重复的元素键值插入.其结构示意图如下: 1.multiset元素插入 #include <iostream> #include <stdio.h> #include <vector> #include <set> #include <string> usi

C++ Primer 第五版学习笔记

<C++ Primer>第五版中文版学习笔记 ? C++ Primer 第五版学习笔记