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的this.setState详细介绍

    this.setState是react类组件中最常用的一个react API,使用它可以改变state从而改变页面.今天我们就来详细的学习一下这个东西.比如: import React, { Comp ...

  2. java流程控制语句要点

    java流程控制语句要点 一.java7增强后的switch switch语句后面的控制表达式的数据类型只能是byte.short.char.int四种整数类型,不能是boolean类型,java7以 ...

  3. SQL中行转列(PIVOT)与列转行(UNPIVOT)

    一.行转列 1.测试数据准备 CREATE TABLE [StudentScores] ( ), --学生姓名 ), --科目 [Score] FLOAT, --成绩 ) 执行结果: 2.行转列sql ...

  4. 十四、 React路由(react-router4.x): 动态路由、get传值、React中使用url模块

    概述 新闻列表 -跳转-> 详情页 时,想把列表对应的id传到详情页里,可用到三种传值方法: 1.动态路由传值 2.get传值 3.localstorage传值 一.动态路由传值 [App.js ...

  5. centos7-虚拟机 主机 互通 静态ip网络设置

    由于目前互联网发展的速度之快.用户量之多,很多时候作为服务端单台服务器的硬件配置已经不足以支撑业务.集群.分布式等技术架构变得越来越普及,作为开发人员也有必要掌握相关技能.笔者打算选用virtual ...

  6. MBE风格图标

    图标的定义 图标是一种通过相似性或类比行来代表对象的符号. 图标的重要性 1.图形以其无与伦比的识别性带来信息传达效率的提升. 2.图形以其百变多样的趣味性带来视觉体验的享受提成用户体验. 3.图形以 ...

  7. 【pwnable.kr】bof

    pwnable从入门到放弃,第三题. Download : http://pwnable.kr/bin/bofDownload : http://pwnable.kr/bin/bof.c Runnin ...

  8. Vulkan 开发学习资料汇总

    开发资料汇总 1.API Reference 2.Vulkan Spec 有详细说明的pdf 文章 1.知乎Vulkan-高性能渲染 2.Life of a triangle - NVIDIA's l ...

  9. 63.Python中contains和icontains

    1. contains: 进行大小写敏感的判断,某个字符串是否包含在指定的字段中,这个判断条件使用大小写敏感进行判断,因此在被翻译成"SQL"语句的时候,会使用"like ...

  10. Vue.js(20)之 封装字母表(是这个名字吗0.0)

    HTML结构: <template> <div class="alphabet-container"> <h1>alphabet 组件</ ...