1)代码展示:  string是一个类,只不过封装了 char*  而且还封装了  很多的字符串操作函数

        

2)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初始化

 #include<iostream>

 #include<string>
using namespace std;
//字符串对象的初始化
void hanshu()
{
string s1="dhajds";
string s2=string("dhskad");
string s3=string(s1);//此时s3和s1是一样的,将s3内容复制一份给了s3
string s4=string('a',);//用4个a对s4进行初始化
}

4)字符串的遍历

    总共是三种,其中那个at()是可以抛出异常,我们可以捕捉的:
  

 #include<iostream>

 #include<string>
using namespace std;
//字符串对象的初始化
void hanshu()
{
string s1="dhajds";
string s2=string("dhskad");
string s3=string(s1);//此时s3和s1是一样的,将s3内容复制一份给了s3
string s4=string('a',);//用4个a对s4进行初始化
}
//字符串的遍历
void bianli(string s)
{
//第一种,因为字符串重载了数组操作符 所以可以像遍历数组那样,进行遍历 //数组方式
cout<<"数组方式来进行遍历字符串"<<endl;
for(int i=;i<s.length();i++)
{
cout<<s[i]<<endl;
} ///第二种是 通过迭代器
cout<<"迭代器方式来进行遍历字符串"<<endl;
for(string::iterator t=s.begin();t<s.end();t++)
{
cout<<*t<<endl;
} //第三种,用at方式
cout<<"用at方式遍历字符串"<<endl;
try{
for(int i=;i<s.length();i++)
{
cout<<s.at(i)<<endl;//抛出异常
}
}
catch(...){
cout<<"发出异常"<<endl;
} }
int main()
{
string s="abcdefghijklmn";
bianli(s);
return ;
}

      然后 ,加入我的代码发生了问题,比如  我的  数组遍历方式有问题

 #include<iostream>

 #include<string>
using namespace std;
//字符串对象的初始化
void hanshu()
{
string s1="dhajds";
string s2=string("dhskad");
string s3=string(s1);//此时s3和s1是一样的,将s3内容复制一份给了s3
string s4=string('a',);//用4个a对s4进行初始化
}
//字符串的遍历
void bianli(string s)
{
//第一种,因为字符串重载了数组操作符 所以可以像遍历数组那样,进行遍历 //数组方式
cout<<"数组方式来进行遍历字符串"<<endl;
for(int i=;i<s.length()+;i++)//我这里i多了3,越界了
{
cout<<s[i]<<endl;
} }
int main()
{
string s="abcdefghijklmn";
bianli(s);
return ;
}

    最后结果展示  直接代码崩掉

然后你再看我的at(),有异常抛出的代码处理问题的方式:
  

 #include<iostream>

 #include<string>
using namespace std;
//字符串对象的初始化
void hanshu()
{
string s1="dhajds";
string s2=string("dhskad");
string s3=string(s1);//此时s3和s1是一样的,将s3内容复制一份给了s3
string s4=string('a',);//用4个a对s4进行初始化
}
//字符串的遍历
void bianli(string s)
{
//第三种,用at方式
cout<<"用at方式遍历字符串"<<endl;
try{
for(int i=;i<s.length()+;i++)
{
cout<<s.at(i)<<endl;//抛出异常
}
}
catch(...){
cout<<"发出异常"<<endl;
} }
int main()
{
string s="abcdefghijklmn";
bianli(s);
return ;
}

      结果展示:
    

5)字符串:字符指针和string类的转换

    

      

     copy 不会在 拷贝的字符后面加 '\0'  所以  要自己加上,而且  最好 char buf【128】={0},这样初始化

6)字符串的赋值

    

 string &operator=(const string &s);//把字符串s赋给当前的字符串
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个字符赋给当前字符串

7)字符串的拼接:

 string &operator+=(const string &s);  //把字符串s连接到当前字符串结尾
string &operator+=(const char *s);//把字符串s连接到当前字符串结尾
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

8)与字符串比较

 int compare(const string &s) const;  //与字符串s比较
int compare(const char *s) const; //与字符串s比较
compare函数在>时返回 ,<时返回 -,==时返回 。比较区分大小写,比较时参考字典顺序,排越前面的越小。大写的A比小写的a小。

9)字符串的子串

      string substr(int pos=0, int n=npos) const;    //返回由pos开始的n个字符组成的子字符串

 string s="abcdefghijklmn";
cout<<s.substr(,)<<endl;

10)字符串的查找和替换

 查找
int find(char c,int pos=) const; //从pos开始查找字符c在当前字符串的位置
int find(const char *s, int pos=) const; //从pos开始查找字符串s在当前字符串的位置
int find(const string &s, int pos=) const; //从pos开始查找字符串s在当前字符串中的位置
find函数如果查找不到,就返回-
int rfind(char c, int pos=npos) const; //从pos开始从后向前查找字符c在当前字符串中的位置
int rfind(const char *s, int pos=npos) const;
int rfind(const string &s, int pos=npos) const;
//rfind是反向查找的意思,如果查找不到, 返回-1 替换
string &replace(int pos, int n, const char *s);//删除从pos开始的n个字符,然后在pos处插入串s
string &replace(int pos, int n, const string &s); //删除从pos开始的n个字符,然后在pos处插入串s
void swap(string &s2); //交换当前字符串与s2的值 //4 字符串的查找和替换
void main25()
{
string s1 = "wbm hello wbm 111 wbm 222 wbm 333";
size_t index = s1.find("wbm", );
cout << "index: " << index; //求itcast出现的次数
size_t offindex = s1.find("wbm", );
while (offindex != string::npos)
{
cout << "在下标index: " << offindex << "找到wbm\n";
offindex = offindex + ;
offindex = s1.find("wbm", offindex);
} //替换
string s2 = "wbm hello wbm 111 wbm 222 wbm 333";
s2.replace(, , "wbm");
cout << s2 << endl; //求itcast出现的次数
offindex = s2.find("wbm", );
while (offindex != string::npos)
{
cout << "在下标index: " << offindex << "找到wbm\n";
s2.replace(offindex, , "WBM");
offindex = offindex + ;
offindex = s1.find("wbm", offindex);
}
cout << "替换以后的s2:" << s2 << endl;
}

11)字符串的区间删除和插入

 string &insert(int pos, const char *s);
string &insert(int pos, const string &s);
//前两个函数在pos位置插入字符串s
string &insert(int pos, int n, char c); //在pos位置 插入n个字符c string &erase(int pos=, int n=npos); //删除pos开始的n个字符,返回修改后的字符串

12)字符串的算法相关

 void main27()
{
string s2 = "AAAbbb";
transform(s2.begin(), s2.end(), s2.begin(), toupper);
cout << s2 << endl; string s3 = "AAAbbb";
transform(s3.begin(), s3.end(), s3.begin(), tolower);
cout << s3 << endl;
}

65)STL中string的知识的更多相关文章

  1. STL 中 string 的使用

    赋值 string 类型变量可以直接赋值 str = "string"; // str 是 一个 string 类型变量 //等价于 str.assign("string ...

  2. STL中map用法

    Map是 STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于 这个特性,它完成有可能在我们处理一对一数据的 ...

  3. (转载) STL中map用法详解

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  4. c++中string (MFC)

    题目:UVALive - 6439    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid= ...

  5. STL之map基础知识

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  6. STL库中string类内存布局的探究

    在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...

  7. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  8. 学习一下 JVM (二) -- 学习一下 JVM 中对象、String 相关知识

    一.JDK 8 版本下 JVM 对象的分配.布局.访问(简单了解下) 1.对象的创建过程 (1)前言 Java 是一门面向对象的编程语言,程序运行过程中在任意时刻都可能有对象被创建.开发中常用 new ...

  9. STL中map与hash_map容器的选择收藏

    这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自al ...

随机推荐

  1. React 学习笔记(2) 路由和UI组件使用

    安装依赖 cnpm install react-router-dom -S // 或 yarn add react-router-dom 导入 // index.js import React fro ...

  2. 编译Linux

    下载内核源文件 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/ 生成.config配置文件 make ...

  3. 一、VIP课程:互联网工程专题 05-快速掌握Jenkins原理与核心功能

    第五课:快速掌握jenkins核心功能.docx 2.164 (2019-02) and newer: Java 8 or Java 11 一.jenkins 概述与环境配置 知识点: 关于可持续化集 ...

  4. 【转载】webDriver拾级而上·之五 iframe的处理

    有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题.这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一. 如果你在 ...

  5. 从零开始Windows环境下安装python+tensorflow

    从零开始Windows环境下安装python+tensorflow 2017年07月12日 02:30:47 qq_16257817 阅读数:29173 标签: windowspython机器学习te ...

  6. web应用中并发控制的实现,各种锁的集合

    参考:http://blog.csdn.net/xiangwanpeng/article/details/55106732 B/S构架的应用越来越普及,但由于它有别于C/S构架的特殊性,并发控制始终没 ...

  7. stm32h7 开发板学习

    按键和 IO 之间连接一个 1K 电阻,可以防止当 IO 被配置为高电平输出的时候,按下按键,导致 VDD 和 GND 直接连通.

  8. unix中嘚vim编辑器

    在linux家族中,vim编辑器是系统自带的文本编辑器,其功能强大自不必说了. 偶有小白,刚接触linux,要修改某个文本文件,不可能像WINDOWS那样操作,更有甚者,进入VI编辑器后,无法退出以致 ...

  9. js冒泡,阻止冒泡

    js 冒泡事件 阻止冒泡 window.onload = function () { var oDiv1 = document.getElementById('div1'); var oDiv2 = ...

  10. VC6.0 The value of ESP was not properly saved across a function call 错误解决方法

    调用DLL函数,出现错误 Run-Time Check Failure #0 - The value of ESP was not properly saved across a function c ...