衔接上一篇引导。

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

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

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

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

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

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

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

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

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

一、初始化与读入:

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

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

例子如下:

(1)初始化:

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

(2)读入:

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

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

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

  (1)遍历:

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

    下面上例子:

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

  (2)追加字符串:

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

    例子如下:

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

  (3)裁剪字符串:

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

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

一、搜索:

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

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

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

Gengxin讲STL系列——String的更多相关文章

  1. Gengxin讲STL系列目录

    引言:有人催我写关于STL的博客#(滑稽)        STL嘛,昨晚有人一直逼问我STL名字的由来——STL = Standard Template Library,标准模板库,惠普实验室开发的一 ...

  2. Gengxin讲STL系列——Set

    本系列第二篇blog 第一篇写的心潮澎湃,结果写完一看,这都是些什么玩意= =| Set的中文名称是“集合”.集合,高一数学必修一课本给出的定义已经很明确了,简单来讲就是一个不含重复元素的空间(个人定 ...

  3. Gengxin讲STL系列——Queue和Stack

    第三篇. 感觉队列和栈是必须的……所以决定加上这两个…… 我发现我已经买域名买上隐了……今天又买了个.top……真是智障…… Queue(队列FIFO)和Statk(栈LIFO). 那么为什么要这两个 ...

  4. 《STL系列》之map原理及实现

    上一篇文章<STL系列>之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现.STL实现源码下载.STL中map的实现是基于RBTree的,我在实现的时 ...

  5. 给小班讲stl 之 map、sort、优先队列

    引子:最近老师让给小班讲课,讲stl,,但是我觉得就小班现在这水平根本讲不懂好不好,,,,

  6. 跟我学STL系列(1)——STL入门介绍

    一.引言 最近这段时间一直都在自学C++,所以这里总结下自己这段时间的学习过程,通过这种方式来巩固自己学到的内容和以备后面复习所用,另外,希望这系列文章可以帮助到其他自学C++的朋友们. 由于本人之前 ...

  7. STL的string和wstring

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

  8. C++之STL之string

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

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

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

随机推荐

  1. codeforces 505B Mr. Kitayuta's Colorful Graph(水题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Mr. Kitayuta's Colorful Graph Mr. Kitayut ...

  2. (原)调用jpeglib对图像进行压缩

    网址:http://www.cnblogs.com/darkknightzh/p/4973828.html.未经允许,严禁转载. 参考网站: http://dev.w3.org/Amaya/libjp ...

  3. 一种无new创建对象的方法

    var L=function(){ var obj = { age:38, live:true, job:"web dev" }; obj.name = "zhouhui ...

  4. 【6】使用nginx

    sudo vim /etc/nginx/nginx.conf user root; worker_processes 2; error_log /var/log/nginx/error.log; pi ...

  5. 2015网易校招Java开发工程师(技术架构)在线笔试题

    1.  程序和进程的本质区别是? A.在外存和内存存储 B.非顺序和顺序执行机器指令 C.独占使用和分时使用计算机资源 D.静态和动态特征 参考答案分析: 进程与应用程序的区别: 进程(Process ...

  6. Roads in the North(POJ 2631 DFS)

    Description Building and maintaining roads among communities in the far North is an expensive busine ...

  7. ASP.NET Ajax In Action!

    创建XMLHTTPRequest 代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeH ...

  8. 工作中小知识点汇总(sql)

    1.with(nolock) 在查询表的时候加上它可以增加33%查询效率 例子:SELECT TOP 5 b.UserName,f.issuedDate,r.tktedTime,r.refundSig ...

  9. unzip解压中文文件名乱码

    由于中文的Windows使用的是GBK编码,而Linux默认使用UTF-8编码的,如果在Windows打包带中文文件的zip包,则这个zip包在Linux下面使用默认的归档管理器打开这个zip包的时候 ...

  10. load Event

    document.addEventListener("DOMContentLoaded");------------------load document.body.addEven ...