string容器
一、string特性
string是STL的字符串类型,通常用来表示字符串。而在使用string之前,字符串通常是用char*表示的,string与char*都可以用来表示字符串。
说到string的特性,就不得不和char*类型的字符串对比:
1、char*是一个指针,string是一个类
string封装了char*,管理这个字符串,是一个char*型的容器。
2、string封装了很多实用的成员方法
查找find,拷贝copy,删除delete,替换replace,插入insert
3、不用考虑内存释放和越界
string管理char*所分配的内存,每一次string的复制,取值都由string类负责维护,不用担心复制越界和取值越界等。
4、string和char*可以相互转换,string转char*通过string提供的c_str()方法。
//string转char*
string str=“itcast”;
const char* cstr=str.c_str();
//char*转string
char* s=“itcast”;
string sstr(s);
二、string初始化、拼接、赋值、查找、替换、比较、子串、插入和删除
1、string构造函数
用string初始化字符串分两类:用“=”号就是拷贝初始化,否则就是直接初始化。


默认构造函数:
string(); //构造一个空的字符串string s1。
拷贝构造函数:
string(const string &str); //构造一个与str一样的string。如string s1(s2)。
带参数的构造函数
string(const char *s); //用字符串s初始化
string(int n,char c); //用n个字符c初始化
例子:
string s1;//初始化字符串,空字符串
string s2 = s1; //拷贝初始化,深拷贝字符串
string s3 = "I am Yasuo"; //直接初始化,s3存了字符串
string s4(, 'a'); //s4存的字符串是aaaaaaaaaa
string s5(s4); //拷贝初始化,深拷贝字符串
string s6("I am Ali"); //直接初始化
string s7 = string(, 'c'); //拷贝初始化,cccccc
2、string存取字符操作
char& operator[](int n);//通过[]方式取字符
char& at(int n);//通过at方法获取字符
//例子:
string s="itcast";
char c=s[];
c=s.at();
3、string基本赋值操作

4、string拼接

5、string查找和替换

6、string比较

7、string子串

8、string插入和删除

三、案例
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std; //string初始化
void test01()
{
string s1;//调用无参构造,初始化字符串,空字符串
string s2(, 'a');
string s3("abcdefg");
string s4(s3); cout << s1 << endl;//空字符串
cout << s2 << endl;//aaaaaaaaaa
cout << s3 << endl;//abcdefg
cout << s4 << endl;//abcdefg
} //string赋值操作
void test02()
{
string s1;//调用无参构造,初始化字符串,空字符串
string s2("appp");
s1 = "abcdefg";
cout << s1 << endl;
s1 = s2;
cout << s1 << endl;
s1 = "a";
cout << s1 << endl; //成员方法
s1.assign("jkl");
cout << s1 << endl;
} //取值操作
void test03()
{
string s1 = "abcdefg"; //重载[]操作符
for (int i = ;i < s1.size();i++)
{
cout << s1[i] << " ";
}
cout << endl; //at成员函数
for (int i = ;i < s1.size();i++)
{
cout << s1.at(i) << " ";
}
cout << endl; //这两种方法的区别:
//[]方式 如果访问越界,直接挂了
//at方式 访问越界 抛异常out_of_range try {
cout << s1.at() << endl;
}
catch (...) {
cout << "越界!" << endl;
}
} //string拼接操作
void test04()
{
string s = "abcd";
string s2 = "";
s += "abcd";
s += s2;
cout << s << endl;//abcdabcd1111 string s3 = "";
s2.append(s3);
cout << s2 << endl;// string s4 = s2 + s3;
cout << s4 << endl;// } //string查找操作
void test05()
{
string s = "abcdefghjfgkl";
//查找第一次出现的位置
int pos = s.find("fg");
cout << "pos:" << pos << endl;//pos:5 //查找最后一次出现的位置
pos = s.rfind("fg");
cout << "pos:" << pos << endl;//pos:9
} //string替换操作
void test06()
{
string s = "abcdefg";
s.replace(, , "");
cout << s << endl;//111cdefg
} //string比较操作:
//compare函数在>时返回1,<时返回-1,==时返回0.
//比较区分大小写,比较时参考字典顺序,排越前面的越小。
//大写的A比小写的a小。
void test07()
{
string s1 = "abcd";
string s2 = "abed";
if (s1.compare(s2) == )
{
cout << "s1与s2相等" << endl;
}
else if(s1.compare(s2) > )
{
cout << "s1大于s2" << endl;
}
else
{
cout << "s1小于s2" << endl;//s1小于s2
}
} //string子串操作
void test08()
{
string s = "abcdefg";
string mysubstr = s.substr(, );
cout << mysubstr << endl;//bcd
} //string插入和删除操作
void test09()
{
string s = "abcdefg";
s.insert(, "");
cout << s << endl;//abc111defg s.erase(, );
cout << s << endl;//c111defg
} int main(void)
{
//test01();
//test02();
//test03();
//test04();
//test05();
//test06();
//test07();
//test08();
test09(); return ;
}
部分参考了:https://blog.csdn.net/zyq522376829/article/details/46792893
string容器的更多相关文章
- 数据结构《19》----String容器的三种实现
一.序言 一个简单的string 容器到底是如何实现的? 本文给出了 String 的三种从易到难的实现,涉及了 reference counting, copy on write 的技术. 二.第一 ...
- stl string 容器的使用
string 是基本的字符串序列容器,对应数据结构中的串,和vector<char>也类似,但功能更多 string 容器的使用 1,string 的构造函数是. string() 2,s ...
- 浅谈C++ STL string容器
浅谈C++ STL string容器 本篇随笔简单讲解一下\(C++STL\)中\(string\)容器的使用方法及技巧. string容器的概念 其实\(string\)并不是\(STL\)的一种容 ...
- 2.2 C++STL string容器详解
文章目录 引言 2.2.1 string的特性 2.2.2 string用法理论 2.2.2.1 string构造函数 2.2.2.2 string赋值操作 2.2.2.3 string取值操作 2. ...
- c++的string容器
c++相比c的一个好处就是实现了很多的容器和泛型算法,使得程序员的工作得到了很大的化简.其中一个很有用的泛型容器就是string.string是一个类,是一个在STL里边实现好了的类,由于他的很多功能 ...
- C++进阶 STL(1) 第一天 [容器,算法,迭代器] string容器 vector容器 deque容器
课程大纲 02实现基本原理 容器,算法,迭代器 教室:容器 人:元素 教室对于楼:容器 序列式容器: 容器元素在容器中的位置是由进入容器的时间和地点来决定 序列式容器 关联式容器: 教室中 按年龄排座 ...
- HDU 1113 Word Amalgamation (map 容器 + string容器)
http://acm.hdu.edu.cn/showproblem.php?pid=1113 Problem Description In millions of newspapers across ...
- 11.string容器
#include <iostream> //string的本质也是容器 #include <string> #include <cstdlib> using nam ...
- STL之string容器
string string封装了char*,管理这个字符串,是一个char*型的容器. string的相关操作 头文件 #include<string> string构造函数 string ...
随机推荐
- first application
<!DOCTYPE html> <html> <head> <title>Create a Map</title> <meta htt ...
- java 断言工具类
1.断言工具类 package com.sze.redis.util; import java.util.Collection; import java.util.Map; import com.sz ...
- WEB-INF有关的目录路径总结、转向方式: forward 重定向方式: Redirect
WEB-INF有关的目录路径总结 1.资源文件只能放在WebContent下面,如 CSS,JS,image等.放在WEB-INF下引用不了. 2.页面放在WEB-INF目录下面,这样可以限制访问,提 ...
- Java技术路线
1.计算机基础: 1.1数据机构基础: 主要学习: 1.向量,链表,栈,队列和堆,词典.熟悉 2.树,二叉搜索树.熟悉 3.图,有向图,无向图,基本概念 4.二叉搜索A,B,C类熟练,9大排序熟悉. ...
- 多个网络请求成功返回再执行另外任务的思路分析(iOS)
前言 今天我们来讨论一个经常出现的需求场景,也是一个老话题.在开发中我们往往会遇到需要进行多个网络请求,并且需要多个网络请求成功返回后再做其他事的场景.比如同一个界面显示的内容需要用到两个网络接口,而 ...
- 基于R语言的数据分析和挖掘方法总结——均值检验
2.1 单组样本均值t检验(One-sample t-test) 2.1.1 方法简介 t检验,又称学生t(student t)检验,是由英国统计学家戈斯特(William Sealy Gosset, ...
- 继承Thread类与实现Runnable接口
java中创建线程有两种方式: 1. 类继承Thread类,重写run方法,每创建一个实例对象即开启一个线程 2. 类实现Runnable接口,重写run方法,将实例对象传入新建Thread的方法: ...
- Python3.4 用 pip 安装lxml时出现 “Unable to find vcvarsall.bat ”
我的python版本是Python 3.5 该问题的产生是在windows环境中,python 的 Setup需要调用一个vcvarsall.bat的文件,该文件需要安装c++编程环境才会有.网上的方 ...
- char,uchar,0xff
如果:char test = 0xFF: 此时:test != 0xFF://因为test为char类型,0xFF为int,所以编译器会将test转为int(-1),所以不等于 如果:uchar te ...
- Linux之Xinetd服务介绍
一.概念:1.独立启动的守护进程:stand-alone,每个特定服务都有单独的守护进程,这个处理单一服务的始终存在的进程就是独立启动的守护进程. 2.超级守护进程:多个服务统一由一个进程管理,该进程 ...