zoukankan      html  css  js  c++  java
  • Gengxin讲STL系列——String

    衔接上一篇引导。

    作为第一篇博客,就要大气一点。

    可我好像并不知道怎么才能让自己的博客大气一点= =;

    明天是我生日,自己先买个中文域名庆祝了一下……

    好了,废话说完了,结果博客也没大气到哪去……,正文,现在开始。

    关于String(字符串),想必小班同学都已经很熟悉了,比char数组好用多了嘛,不用管申请多少空间,操作方便。可是据我观察,大家好像并没有对string有一个系统的认识……所以,在开篇,我要介绍介绍String这个神奇的东西。

             (好像并没有什么可以介绍的)

             String就是字符串的英文嘛,好了介绍完了。

             (别怪我偷懒,真的没啥好解释的)

             下面开始讲String操作。归一下类,操作主要有初始化、增、删、插入、搜索这几类(如果还有不全的小班同志们评论区提意见)。下面详解:

    一、初始化与读入:

    初始化嘛,就是申请一个string类型的变量,然后赋或不赋初值。

    那读入呢?两种方式,第一是直接cin,第二就是getline。

    例子如下:

     (1)初始化:

    1 //初始化:
    2         string s;      //默认空串
    3         string s1 = "gengxin";//最最最最最直接的申请、赋值方式
    4         string s2(s1);   //申请变量s2,顺便把s1的值赋给s2
    5         string s3("gengxin");  //申请变量s3,顺便把"gengxin"赋给s3
    6         /*注:s2和s3的初始化其实是一个意思,因为s1是个字符串类型的数据,"gengxin"也是字符串类型的数据,
    7         所以说这两种初始化方式其实可以看作一种*/
    8         string s4(n,'c');   //申请变量s4,顺便把s4赋成n个'c'组成的字符串
    9         /*例:如果n=5,那么s4的值就是"ccccc"(5个c)*/

     (2)读入:

    1      cin>>s5;  //读到空格为止(读入过程中遇到空格结束)
    2         getline(cin,s6);
    3         /*读取字符,直到遇到换行,空格可读入,默认是读入时遇到‘
    ’结束,*/
    4         getline(cin,s7,'a');
    5         /*跟上一种方法一样的啦……就是上一个方法是读到'/n'结束,而getline的读入结束标志是可以自定义的,
    6         本例是读到'a'字符结束,例如输入字符串"gengxindahaoren",s7的读入结果就是gengxind*/

     让我们来看一下最后一种输入方式(有人说我讲课不明白= =现在这个样子能理解了吧……):

    一、遍历、追加、剪裁字符串:

      (1)遍历:

        遍历嘛,其实有两种方式,第一种就是跟普通char数组一样,用下标来表示字符串中的某一位字符,比如s1=”gengxin”,那么s1[0]就是’g’(注意这里是字符’g’,想想为什么)(字符串的第一位是从0开始的,所以s1[0]就是’g’).第二种方法是用迭代器,不过关于迭代器我想过一会再讲……(遍历之前,需要了解一种叫做.length()的东西)

        下面上例子:

     1 /*遍历*/
     2         string str = "str";
     3         str.length()/*返回字符串的实际长度。
     4         例:str="zhang";str.length()返回5……*/
     5         for(int i=0;i<str.length();i++){
     6             /*因为.length()返回的是字符串的实际长度,而字符串确是从第0位开始的
     7             所以在遍历的时候只需要操作到str.length()-1位,也就是像这个for里这样*/
     8             cout<<str[i];//执行相应的操作
     9         }
    10         /*输出结果就是  str   */

      (2)追加字符串:

        字符串的操作其实很简单……追加的话,就直接用+号好啦(Python好像= =)

        例子如下:

    1         string str = "str";
    2         str = str+"str";//当前str="strstr"
    3         /*相同的方法:str+="str"*/
    4         str += str;//当前str="strstrstrstr"

      (3)裁剪字符串:

        裁剪字符串,也就是截取指定位置的一段字符。比如说”gengxin_and_gengxin”,如果想要提取这个字符串的第2到第十位字符串,那么该怎么办呢?看例子:

    1 string str = "update_and_gengxin";
    2         string buf = str.substr(7);//str.substr(7)就是str自第七位以后的字符组成的字符串。
    3         /* buf = and_gengxin */
    4         buf = buf.substr(0,3);/*buf.substr(0,3)的意思就是buf字符串的从第0位开始3个字符所组成的字符串*/
    5         /* buf = and (第0位开始后三位)*/

    一、搜索:

      其实string有个非常方便的成员函数,名字叫做.find()……顾(fan)名(yi)思(yi)义(xia),find嘛,就是搜索。可以很方便的搜索某个字符串里存不存在目标字符串,甚至还可以直接返回目标字符串的位置。是不是很神奇呢?下面看例子:

     1         string str = "update_and_gengxin";
     2         string want_find = "update";
     3         cout<<str.find(want_find);//find()返回的是一个int类型的值,所以这里其实也可以是int i=str.find(want_find);
     4         /*want_find第一次出现的位置。注意:这里也是按照字符串的规则,第一位是从0开始的。当查找的起始位置超出字符串长度时,按查找失败处理(如:str.find(want_find,1000000000),就会按找不到处理)*/
     5         /* output: 0 */
     6         cout<<str.find("e");//当然find()不止可以搜索字符串,单个字符也是可以的哦
     7         /* output:5 */
     8         cout<<str.find('e',7);/*这句的意思就是说,搜索将会从第7位开始。也就是搜索第7位开始到字符串结束这个范围内的字符串.当然,返回的位置是目标串在原串中的位置*/
     9         /* output:12 */
    10         int i = str.find("e",12,16);/*在第12位到第16位这个范围内搜索目标串。一样,返回的位置依旧是目标串在原串中的位置(看好了,我这里搜索的是"e",而不是'e',因为在这里find搜索某一区间内的字符串有点蛋疼,,不能搜索单个字符,不能直接用cout,,否则都会出错)*/
    11         cout<<i;
    12         /* output:-1(这个略蛋疼,我也没大用过)*/
    13         /*补充:其实关于find,还有很多很多,比如说rfind(),find_first_of(),find_last_of(),find_first_not_of(),find_last_not_of()……这都是一个系列的东西。暂时先不讲了(因为暂时没有必要),如果想了解的话点击博客尾部的链接~*/
    14         

     因为被催所以提前放在这里的链接= =|

  • 相关阅读:
    Windows Server 2008 定时任务卡住了不执行
    Oracle正则表达式取得所有非匹配的查询结果
    Websphere6.1.x不打印Log4j日志问题解决办法
    js的parseInt函数结果为0很奇怪的问题
    ORA12514: TNS:listener does not currently know of service问题原因
    Windows Server 2003升级IE6到高版本系统不支持解决方法
    Windows Server 2008 定时任务卡住了不执行
    Oracle正则表达式取得所有非匹配的查询结果
    Websphere6.1.x不打印Log4j日志问题解决办法
    Hibernate保存数据自动生成主键出现奇怪异常Duplicate entry '0' for key 1
  • 原文地址:https://www.cnblogs.com/zhangone/p/5555372.html
Copyright © 2011-2022 走看看