衔接上一篇引导。

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

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

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

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

关于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. 系统简单的UIImagePickerController

    1.从系统相册中读取 /* 判断选择的读取类型是否支持 UIImagePickerControllerSourceTypePhotoLibrary,普通相册 UIImagePickerControll ...

  2. NSNotification消息

    注册消息 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(方法) name:@"消息名字&q ...

  3. 使用log4net写自定义日志

    在使用log4net写Web服务器端日志的时候,通常需要一些自定义的参数,比如请求的url,method,以及用户名等等,而log4net中默认的Log接口只提供了很少的参数.    在网上找的其他的 ...

  4. 简单实用的HTML代码

    简单实用的HTML代码 一.HTML各种命令的代码: 1.文本标签(命令) <pre></pre> 创建预格式化文本 <h1></h1> 创建最大的标题 ...

  5. POJ2533:Longest Ordered Subsequence(LIS)

    Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence ...

  6. ActionBar-PullToRefreshLibs+沉浸式在部分手机上的布局错乱,目前知道的三星

    前段时间看见ActionBar-PullToRefreshLibs用来刷新很好看,配合4.4以上支持的沉浸式效果更佳,于是便想配合沉浸式+ActionBar-PullToRefreshLibs做出一个 ...

  7. 玩sdr的朋友们,在rtl_tcp时,记得调整rtl_AGC和tuner_AGC啊

    我在rtl_tcp时没有调整这个,结果怎么也听不到声音啊 还有就是在搞rtl_tcp时,一定要网速跟得上,我用无线网络时就碰到了这个问题,声音总是一直断续着,郁闷死

  8. USB CCID "复杂"命令拾零?

    本文记录 USB CCID 标准中几个"复杂"的命令,复杂在于在这些命令身上花的时间较之简单的命令多许多或者是理解的时间比较晚,可能就是刚才.主要有以下几条:ccid_T0APDU ...

  9. JavaSctipr 兼容、技巧、牛角尖

    关于JavaSctipt的兼容性,最懒的办法就是用jQuery的工具函数.尽量不要用那些什么ECMAScript之类的函数,因为很多浏览器都会报找不到函数的错误.下面列出一些在开发过程中碰到过的jav ...

  10. POJ 2533 Longest Ordered Subsequence - from lanshui_Yang

    题目大意:求一个数列的最长上升子序列(严格上升). 解题思路: 方法一:O(n^2) dp[i]:表示处理到第i个位置,序列的最长上升子序列末尾为i的长度: a[]数组存储原序列 dp[i] = ma ...