#include <iostream>
#include <string>
using namespace std; // 初始化
void test01()
{
string s1; // 调用无参构造 创建一个空的字符串
string s2(, 'c'); // 使用 n 个字符 c 初始化
string s3("abcdefg"); // 使用字符串初始化
string s4(s3); // 使用一个 string 对象初始化另一个 string 对象(拷贝构造)
cout << s1 << endl;
cout << s2 << endl;
cout << s3 << endl;
cout << s4 << endl;
cout << "-----------------" << endl;
} // 赋值操作
// string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串
// string& operator=(const string &s);//把字符串 s 赋给当前的字符串
// string& operator=(char c);//字符赋值给当前的字符串
// string& assign(const char *s);//把字符串 s 赋给当前的字符串
// string& assign(const char *s, int n);//把字符串 s 的前 n 个字符赋给当前的字符串
// string& assign(const string &s);//把字符串 s 赋给当前字符串
// string& assign(int n, char c);//用 n 个字符 c 赋给当前字符串
// string& assign(const string &s, int start, int n);//将 s 从 start 开始 n 个字符赋值给字符串
void test02()
{
string s1;
string s2("appp");
s1 = "abcdef";
cout << s1 << endl;
s1 = s2;
cout << s1 << endl;
s1 = 'a';
cout << s1 << endl;
// 成员方法assign
s1.assign("jkl");
cout << s1 << endl;
cout << "-----------------" << 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;
try
{
// cout << s1[100] << endl;
cout << s1.at() << endl;
}
catch (...)
{
cout << "越界" << endl;
}
cout << "-----------------" << endl;
// 区别:[]方式如果访问越界,就直接挂了
// at方式 访问越界会抛出异常out_of_range
} // 拼接操作
// string& operator+=(const string& str);//重载+=操作符
// string& operator+=(const char* str);//重载+=操作符
// string& operator+=(const char c);//重载+=操作符
// string& append(const char *s);//把字符串 s 连接到当前字符串结尾
// string& append(const char *s, int n);//把字符串 s 的前 n 个字符连接到当前字符串结尾
// string& append(const string &s);//同 operator+=()
// string& append(const string &s, int pos, int n);//把字符串 s 中从 pos 开始的 n 个字符连接到当前字符串结尾
// string& append(int n, char c);//在当前字符串结尾添加 n 个字符 c
void test04()
{
string s = "abcd";
string s2 = "";
s += "abcd";
s += s2;
cout << s << endl;
string s3 = "";
s2.append(s3);
cout << s2 << endl;
string s4 = s2 + s3;
cout << s4 << endl;
cout << "-----------------" << endl;
} // 查找操作
// int find(const string& str, int pos = 0) const; //查找 str 第一次出现位置,从 pos 开始查找
// int find(const char* s, int pos = 0) const; //查找 s 第一次出现位置,从 pos 开始查找
// int find(const char* s, int pos, int n) const; //从 pos 位置查找 s 的前 n 个字符第一次位置
// int find(const char c, int pos = 0) const; //查找字符 c 第一次出现位置
// int rfind(const string& str, int pos = npos) const;//查找 str 最后一次位置,从 pos 开始查找
// int rfind(const char* s, int pos = npos) const;//查找 s 最后一次出现位置,从 pos 开始查找
// int rfind(const char* s, int pos, int n) const;//从 pos 查找 s 的前 n 个字符最后一次位置
// int rfind(const char c, int pos = 0) const; //查找字符 c 最后一次出现位置
void test05()
{
string s = "abcdefgffffghijkl";
// 查找第一次出现的位置
int pos = s.find("fg");
cout << "pos: " << pos << endl;
// 查找最后一次出现的位置
pos = s.rfind("fg");
cout << "pos: " << pos << endl;
cout << "-----------------" << endl;
} // string替换
// string& replace(int pos, int n, const string& str); //替换从 pos 开始 n 个字符为字符串 str
// string& replace(int pos, int n, const char* s); //替换从 pos 开始的 n 个字符为字符串 s
void test06()
{
string s = "abcdefg";
s.replace(, , "");
cout << s << endl;
cout << "-----------------" << endl;
} // string 比较
/* compare 函数在>时返回 1,<时返回 -1,==时返回 0。比较区分大小写,比较时参考字典顺序,排越前面的越小。大写的 A 比小写的 a 小。 */
// int compare(const string &s) const; //与字符串 s 比较
// int compare(const char *s) const;//与字符串 s 比较
void test07()
{
string s1 = "abcd";
string s2 = "abce";
if (s1.compare(s2) == )
{
cout << "字符串相等!" << endl;
}
else
{
cout << "字符串不相等!" << endl;
}
cout << "-----------------" << endl;
} // 子串操作
// string substr(int pos = 0, int n = npos) const;//返回由 pos 开始的 n 个字符组成的字符串
void test08()
{
string s = "abcdefg";
string mySubstr = s.substr(, );
cout << mySubstr << endl;
cout << "-----------------" << endl;
} // 插入和删除
// string& insert(int pos, const char* s); //插入字符串
// string& insert(int pos, const string& str); //插入字符串
// string& insert(int pos, int n, char c);//在指定位置插入 n 个字符c
// string& erase(int pos, int n = npos);//删除从 Pos 开始的 n 个字符
void test09()
{
string s = "abcdefg";
s.insert(, "");
cout << s << endl;
s.erase(, );
cout << s << endl;
} int main()
{
test01();
test02();
test03();
test04();
test05();
test06();
test07();
test08();
test09();
getchar();
return ;
}
 //string 转 char*
string str = "itcast";
const char* cstr = str.c_str();
//char* 转 string
char* s = "itcast";
string sstr(s);

C++ STL 之 string的更多相关文章

  1. STL的string和wstring

    STL有字符串处理类——stirng和wstring,但是用的时候会觉得不是很方便,因为它不能像TCHAR一样根据定义的宏在char类型字符串和wchar_t进行转换,总不能因为程序要Unicode就 ...

  2. C++之STL之string

    /*C 语言中字符数组一般会采用char str[]来存放,但是显得会比较麻烦,C++在stl中加入了string类型,对字符串常用的功能进行了封装,操作起来比较方便*/#include<cst ...

  3. POJ 3096 Surprising Strings(STL map string set vector)

    题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...

  4. C++STL之string (转)

    在学习c++STL中的string,在这里做个笔记,以供自己以后翻阅和初学者参考. 1:string对象的定义和初始化以及读写 string s1;      默认构造函数,s1为空串 string ...

  5. C++STL之String

    本文直接转载,非原创!仅记录供自己学习之用. 出处:http://blog.csdn.net/y990041769/article/details/8763366 在学习c++STL中的string, ...

  6. STL 的string类怎么啦?

    前言   上个周末在和我的同学爬香山闲聊时,同学说到STL中的string类曾经让他备受折磨,几年前他开发一个系统前对string类还比较清楚,然后随着程序的复杂度的加深,到了后期,他几乎对strin ...

  7. STL之string使用简介

    声明一个C++字符串 string类的构造函数和析构函数如下: string s; //生成一个空字符串s string s(str) //拷贝构造函数 生成str的复制品 string s(str, ...

  8. STL:string类中size()与length()的区别

    结论是:两者没有任何区别 解释: C++Reference中对于两者的解释: 两者的具体解释都一模一样: 理解: length是因为C语言的习惯而保留下来的,string类最初只有length,引进S ...

  9. C++ STL介绍——String类

    目录 1.简介 2.string类成员函数汇总 3.String类的构造函数以及析构函数 4.获取字符串长度 5.获取字符串元素 6.字符串比较方法 7.字符串输入输出 8.字符串查找函数 1.简介 ...

  10. 【STL】string 常用函数

    string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类还支持默认构造 ...

随机推荐

  1. Hibernate fetch相关

    fetch=FetchType.LAZY 时,spring boot jackson 返回数据时会出错. 可配置使用Hibernate4Module 帮助解决: @Configurationpubli ...

  2. (翻译) closures-are-not-complicated

    总计:读完这篇文章需要20分钟   这篇文章讲解了闭包的一些内容,作者是拿ES5规范中的一些名词来讲的. 所以可能和博客上一篇文章中提到的binding object, (lexical enviro ...

  3. k8s管理机密信息(9)

    一.启动应用安全信息的保护: Secret介绍: 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...

  4. PAT 甲级 1021 Deepest Root (25 分)(bfs求树高,又可能存在part数part>2的情况)

    1021 Deepest Root (25 分)   A graph which is connected and acyclic can be considered a tree. The heig ...

  5. Spring Security(1):认证和授权的核心组件介绍及源码分析

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方式的安全框架.它包括认证(Authentication)和授权(Authorization)两个部 ...

  6. 分布式消息通信之RabbitMQ_01

    目录 官网 1. RabbitMQ安装 1.1 Window版安装 1.2 Linux版安装 2. 典型应用场景 3. 基本介绍 3.1 AMQP协议 3.2 RabbitMQ的特性 3.3 工作模型 ...

  7. AWS EC2避免误删软件包和数据的方法:取消“终止删除”默认配置

    本文介绍AWS在终止实例的时候如何保留根卷,避免误删软件包和数据. 作者:光环云 尹晓征 在aws控制台创建EC2的时候,我们在添加存储步骤中,如果使用默认配置的情况下,“终止时删除”配置默认是被选中 ...

  8. CTF基础知识 && AWD红蓝对抗

    AWD 备份源码,修改账户密码,查看是否有预留后门然后删掉 修改mysql密码 格式:mysqladmin -u用户名 -p旧密码 password 新密码 例子:mysqladmin -uroot ...

  9. [Kevin英语情报局]那些年我们说过的中式英语

    一. blonde hair 金色头发 grey hair 白头发 baijiu 白酒 white wine 白葡萄酒 I don't think it's right 我认为不正确 I'm chin ...

  10. pacemaker入门

    原文链接:https://blog.csdn.net/a964921988/article/details/82628478 因为数据库部署在Linux上,需要做数据库集群实现高可用,而所有的Post ...