C++ string类专题(修订版)
c++ string类的常用方法

c++ string类的常用方法一、C++ string类的常用方法1、string类的构造函数string() // 构造空串string(const char* s) // 把null结尾的字符串s拷贝到字符串中string(const string& str) // 拷贝构造函数,复制str到此串string(char c, int n) // 用n个字符c构造串string(const char* s, int n) // 拷贝字符数组中前n个字符2、string类的成员函数2.1 长度控制函数int size() const; // 返回字符串的长度int length() const; // 返回字符串的长度,等价于size()void resize(int n, char c); // 改变字符串长度,如果n 大于原来的长度,用字符c来填充2.2 内容操作函数string& operator=(const char* s); // 赋值,把s的内容复制到字符串中string& assign(const char* s); // 赋值,把s的内容复制到字符串中string& append(const char* s); // 把字符串s添加到串尾string& append(const char* s, int n); // 把s前n个字符添加到串尾string& insert(int p0, const char* s); // 在p0位置上插入字符串sstring& erase(int p0, int n); // 删除p0开始,n个字符int find(const char* s, int pos=0); // 在pos之后查找子串s,返回子串s在原串中的起始位置int find(char c, int pos=0); // 从pos开始查找字符c,返回字符c在原串中的位置int rfind(const char* substr,int pos=npos); // 从pos开始向前查找子串substr,返回子串substr在原串中的起始位置int rfind(char c, int pos=npos); // 从pos开始向前查找字符c,返回字符c在原串中的位置string substr(int pos, int n); // 返回串pos 位置开始,长度为n的子串2.3 字符串比较函数int compare(const char* s); // 比较原串和sint compare(int p0, int n, const char* s); // 比较串中p0开始,n个字符的子串和s2.4 数据访问函数char& operator[](int i); // 返回串中第i个字符的引用const char& operator[](int i) const; // 返回串中第i个字符的引用const char* c_str() const; // 返回字符串以null结尾的字符串2.5 输入输出函数ostream& operator<<(ostream& os, const string& str); // 输出字符串istream& operator>>(istream& is, string& str); // 输入字符串。
C++string类成员函数c_str()的用法

C++string类成员函数c_str()的⽤法1.string类成员函数c_str()的原型:const char *c_str()const;//返回⼀个以null终⽌的c字符串2.c_str()函数返回⼀个指向正规c字符串的指针,内容和string类的本⾝对象是⼀样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式;3.操作c_str()函数的返回值时,只能使⽤c字符串的操作函数,如:strcpy()等函数.因为,string对象可能在使⽤后被析构函数释放掉,那么你所指向的内容就具有不确定性.eg: char * name[20];string ptr = "tongnono";strcpy(name,ptr.c_str());//c_str()返回的是⼀个临时的指针变量,不能对其操作.语法:const char *c_str();c_str()函数返回⼀个指向正规C字符串的指针常量, 内容与本string串相同.这是为了与c语⾔兼容,在c语⾔中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
注意:⼀定要使⽤strcpy()函数等来操作⽅法c_str()返回的指针⽐如:最好不要这样:char* c;string s="1234";c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理,同时,编译器也将报错——将⼀个const char *赋与⼀个char *。
应该这样⽤:char c[20];string s="1234";strcpy(c,s.c_str());这样才不会出错,c_str()返回的是⼀个临时指针,不能对其进⾏操作再举个例⼦c_str() 以 char* 形式传回 string 内含字符串如果⼀个函数要求char*参数,可以使⽤c_str()⽅法:string s = "Hello World!";printf("%s", s.c_str()); //输出 "Hello World!"⽐如定义⼀个函数func(const char *s){ //s+1这个指针是对的};func(string s){//s+1是错的};主函数中: string str;调⽤这个函数时可以为 func(s.c_str());。
深入学习C++_String2.1版

目录
目录 1
正文 4
一、 C++的string的使用 4
1.1 C++ string简介 4
1.2 string的成员 4
1.2.1 append 4
1.2.2 assign 5
1.2.3 at 5
1.2.4 begin 6
1.2.5 c_str 6
1.2.6 capacity 6
一、 C++的string的使用
1.1 C++ string简介
C++兼容C对字符串的处理方式,与此同时还在标准库(STL)中提供了string 容器,我们可以很容易的使用string来进行字符串处理。而且string还能很好的与标准库中的泛型算法结合起来使用,非常的方便。虽然在MFC等框架中也提供了诸如CString这样的字符串处理类,但是个人认为STL的string依然是最棒 的,使用标准库提供的string可以轻松的与原来的C API兼容 ,也可以很好的与系统底层的API兼容。
声明:
本文中选择的源码为MSSTL和boost1.37,例子为作者亲手所写,如果代码来自网络或者其它地方我会尽量声明出处。人难免会有疏漏,所以可能会有照顾不周的地方,我也无意侵害您的权益,如果您发现了这样的情况在本文档中出现,请您通知我,我保证马上更正。本文中凡是作者原创的内容,您可以随意修改与使用,欢迎您传播。
basic_string<CharType, Traits, Allocator>& append(
const_pointer _First,
const_pointer _Last
C++课程设计之string字符串类

课程名称: C++程序设计课程代码:05题目: 字符串类的设计年级/专业/班: 软件工程2班学生姓名:学号:指导教师: 袁辉勇开题时间: 2011 年 5 月 15 日完成时间: 2011 年 6 月 5 日—湖南人文科技学院计算机系目录一引言 (3)二设计目的与任务 (3)三设计方案 (4)1 总体设计 (4)2 详细设计 (4)四程序清单 (4)五程序调试与体会 (10)六运行结果 (14)七结论................................................. 错误!未定义书签。
八参考文献............................................... 错误!未定义书签。
摘要本设计通过定义字符串类来实现对字符串的赋值、连接、复制、查找、交换操作。
首先定义一个字符串类,通过调用字符串类中成员函数,对字符串类进行赋值,然后实现了字符串类之间的连接,字符串类之间的相互复制,字符串类之间的交换,最后可以对该字符串类中的字符串进行查找。
关键字:字符串;类;成员函数;对象AbstractBy defining the design of this type of string to string to the realization of the assignment, to connect, copy, find, exchange operations. First of all, the definition of a type of string, by calling members of the String class function, the type of string for assignment, and then realized the connection between the type of string, string-type between the copy, between string-type In exchange, the last class to the string of string to find.Keywords: string; category; members of the function; object 。
c++ string类的常用方法

c++ string类的常用方法x1、string类的构造函数string类的构造函数有三种:(1)默认构造函数:string();(2)以字符串常量指针为参数的构造函数:string (const char *s);(3)以字符串对象为参数的构造函数:string (const string &str);2、string类的赋值操作string类的赋值操作有以下几种:(1)以字符串常量指针为参数的赋值运算符重载:string & operator = (const char *s);(2)以字符串对象为参数的赋值运算符重载:string & operator = (const string &str);(3)拼接函数:string &append (const string &str);(4)两个字符串的拼接:string + string;3、string类的比较操作string类的比较操作有如下几种:(1)比较两个字符串是否相等的比较操作符:string==string;(2)比较两个字符串是否不等的比较操作符:string!=string;(3)比较两个字符串大小的比较操作符:string>string;4、string类的查找操作string类的查找操作有以下几种:(1)查找从某个位置开始某个子串的位置的函数:size_tfind(const string &str,size_t pos = 0);(2)查找从某个位置开始某个字符的位置的函数:size_tfind(char c,size_t pos = 0);(3)查找从右向左某个子串的位置的函数:size_t rfind(const string &str,size_t pos = string::npos);(4)查找从右向左某个字符的位置的函数:size_t rfind(char c,size_t pos = string::npos);5、string类的修改操作string类的修改操作有以下几种:(1)插入字符串的函数:string &insert (size_t pos, const string &str);(2)替换某个子串的函数:string &replace (size_t pos, size_t len, const string &str);(3)删除某个子串的函数:string &erase (size_t pos = 0, size_t len = npos);(4)在字符串前面补充某字符的函数:string &insert (size_t pos, size_t n, char c);(5)清除字符串的函数:void clear();6、string类的截取操作string类的截取操作有以下几种:(1)从某个位置截取字符串的函数:string substr (size_t pos = 0, size_t n = npos);(2)将字符串按照一定的字符分割成多个小字符串的函数:vector<string> split(char c);(3)删除收尾处的某字符的函数:string &trim(char c);。
第4章串(String)(2)专题知识讲座

BF算法旳基本思想图解 本趟匹配开始位置
主串S 模式T
回溯 i
si
…
tj
j 回溯
……
25
BF算法用伪代码 : 1. 在串S和串T中设比较旳起始下标i和j; 2. 循环直到S中所剩字符个数不大于T旳长度或T旳
全部字符均比较完 2.1 假如S[i]=T[j],继续比较S和T旳下一种字符; 2.2 不然将i和j回溯(j=0, i为此次比较旳最初字符 旳下一种字符旳下标),准备下一趟比较; 3. 假如T中全部字符均比较完,则匹配成功,返回 匹配旳起始比较下标;不然,匹配失败,返回0;
4
二、串旳抽象数据类型
数据集合:串旳数据集合能够表达为字符序列 s0,s1, ……,sn-1,每
个数据元素旳数据类型为字符类型。
操作集合:
(1)初始化串 Initiate(S)
(2)赋值
Assign( S, T)
(3)求串长度 strLength( S )
(4)比较
Compare( S, T)
(5)插入
13
2、顺序串旳紧缩存储方式
以字节为单位顺序存储字符串旳每个字符,根据机器字旳 长度,紧缩存储措施尽量地将多种字符存储在一种字中。 对于字符串s =“data structures”,非紧缩存储方式下字 符串s旳顺序存储构造如下:(假设字长为4)
14
2、串旳链式存储构造
它分为单字符结点和块链两种。
18
b.链串
(1)链串赋值
void strassign(linkstring *s, char t[])
{
int k=0; linkstring *r,*p;
s = (linkstring *)malloc(sizeof(linkstring)); s->data = ‘#’; r=s; while (t[k]!=‘\0’) { p=(linkstring *) malloc(sizeof(linkstring));
string类特点

string类特点
string类是一种在编程中常用的数据类型。
它是一种不可改变的字符序列,即一旦创建,就不能修改。
string类的特点如下:
1. 不可修改:string类的对象在创建后不能被修改。
如果需要修改一个字符串,需要创建一个新的字符串对象。
这个特点保证了字符串的安全性和稳定性。
2. 可以进行各种操作:尽管string类的对象不可修改,但是我们可以对字符串进行各种操作,比如拼接、查找、替换等。
这些操作会生成一个新的字符串对象并返回,不会修改原有的字符串。
3. 字符串连接使用"+"运算符:string类支持使用"+"运算符进行字符串连接操作。
可以将两个或多个字符串连接在一起,生成一个新的字符串。
4. 常用的字符串操作方法:string类提供了许多常用的方法,用于字符串的操作和处理,比如获取字符串的长度、截取子串、转换大小写等。
5. 字符串是不可变的:由于字符串的不可修改性,每次对字符串进行操作时都会重新生成一个新的字符串对象。
这样可能会造成内存的浪费,特别是在进行大量操作的情况下。
总的来说,string类提供了方便的字符串操作方法,但是由于不可修改的特性,需要在使用时注意避免频繁地生成新的字符串对象,以减少内存占用。
string的几种构造函数

string的几种构造函数在编程中,字符串(string)是一种非常常用的数据类型,用于存储和操作文本。
在C++语言中,string类是用来表示和操作字符串的类。
string类提供了多个构造函数,用于创建字符串对象。
本文将介绍string的几种构造函数,并详细解释它们的用法。
1. 默认构造函数string类的默认构造函数创建一个空的字符串对象。
空字符串是一个长度为0的字符串,不包含任何字符。
我们可以使用以下语法来创建一个空字符串对象:string str;2. 字符数组构造函数string类还提供了一个构造函数,可以使用字符数组来创建字符串对象。
字符数组是一系列字符的集合,以null字符('\0')结尾。
我们可以使用以下语法来创建一个字符串对象:char arr[] = "Hello";string str(arr);这样,str将包含字符数组arr中的所有字符,并以null字符结尾。
需要注意的是,字符数组的长度必须小于或等于字符串对象的最大长度。
3. 字符串构造函数除了字符数组,我们还可以使用另一个字符串来创建字符串对象。
string类提供了一个接受另一个字符串作为参数的构造函数。
我们可以使用以下语法来创建一个字符串对象:string str1 = "Hello";string str2(str1);这样,str2将包含与str1相同的内容。
这个构造函数会创建一个新的字符串对象,而不是简单地将str2指向str1。
4. 子字符串构造函数string类还提供了一个构造函数,可以使用另一个字符串的一部分来创建一个新的字符串对象。
我们可以使用以下语法来创建一个子字符串对象:string str1 = "Hello World";string str2(str1, 0, 5);这样,str2将包含str1中从索引0开始的5个字符,即"Hello"。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文作者:黄邦勇帅(编著)(原名:黄勇)本文是学习C++的附加内容,主要介绍了C++中的string类的各种成员函数,及成员函数的功能与作用,是作为学习C++的参考使用的。
本文内容完全属于个人见解与参考文现的作者无关,其中难免有误解之处,望指出更正本文使用的是x86机器(主流计算机都是x86机器),windows xp操作系统,VC++2010编译器进行讲解的。
本文内容完全属于个人见解与参考文现的作者无关,限于水平有限,其中难免有误解之处,望指出更正。
声明:禁止抄袭,复印,转载本文,本文作者拥有完全版权。
主要参考文献:1、C++.Primer.Plus.第五版.中文版[美]Stephen Prata著孙建春韦强译人民邮电出版社 2005年5月2、C++.Primer第四版.中文版 Stanley B.Lippman、Barbara E.Moo、Josee Lajoie著李师贤、蒋爱军等译人民邮电出版社 2006年3月3、C++.Primer第三版.中文版 Stanley B.Lippman、Josee Lajoie著潘爱民、张丽等译中国电力版社 2002年5月第19部分 string类专题(共9页)(2016-7-15 修订版)1、string类用于处理字符串,用于代替使用不方便的C风格字符串,使用string类表示的字符串我们可以像处理普通变量那样处理字符串,因此可以对string类表示的字符串进行直接的相加,比较,赋值等操作,比如string s1=”abc”,s2=”def”;则s1=s1+s2;结果s1=”abcdef”;s1=s2;则结果s1=”def” 等,C风格字符串只能使用内置的库函数进行这些操作,使用很不方便,比如char c1[]=”abc”; char c2[]=”def”;则c1=c2;错误,不能改变数组的地址,c1>c2比较的是两个指针的地址而不是字符的大小;c1+c2;错误,这是把两个指针的地址相加而不是把两个字符数组相加。
2、string对象创建的字符串的最大特点是:可以自动调整对象大小以适应所需的字符串,string对象能存储的最大字符数由string类的静态常量string::npos设定,通常是最大的unsigned int值。
一、string类的原型1、要使用string类需要包含string头文件。
2、string是一个模板类,因此它具有类和模板的特性,也就是说string类有构造函数、重载的操作符、成员函数等,因为string是模板类,因此应建一个模板类具体实例化版本的对象才能使用,然后通过对象调用成员函数使用类。
3、记住string s;创建的s是一个类的对象,而不是字符串字面值,他们是两种不同的类型。
4、string类是模板类basic_string类的char特化体版本使用typedef命名后的别名,wstring类是模板类basic_string的wchar特体化版本使用typedef命名后的别名。
5、basic_string类的原型为(重点):template<class charT, class traits=char_traits<charT>, class Allocator=allocator<charT> > class basic_string;1)、charT是个类型模板形参,若实例化时传递char类型,则charT=char,传递wchar则charT=wchar2)、traits是类型模板形参,描述了字符串的特征,比如字符串是否以’\0’作为结束尾等。
traits要求传递一个char_traits<T>的模板类型作为实参。
3)、Allocator也是个类模板形参,他的主要作用是用于处理字符串的内存分配问题,默认使用new和delete分配内存。
Allocator要求传递一个allocator<T>类型的模板类型作为实参。
4)、basic_string有两个特化体版本(重点),如下所示,当然我们也可以实例化其他类型版本的base_string类模板,①、typedef base_string<char> string; //即string类是使用typedef重命名后的basic_string类模板的char特化体版本。
②、typedef base_string<wchar_t> wstring; //主要用于处理宽字符串。
6、size_type类型(重要):size_type是basic_string类中定义的类型,一般被定义为unsigned类型。
需要使用限定名的方法来使用size_type类型,比如string::size_type a;或basic_string<char>::size_type a;7、npos静态常量(重要):表示string对象能够存储的最大字符数,其形式为:static const size_type npos=-1; 可见npos是basic_string类中定义的静态常量,其类型为size_type其值为-1,对于无符号的size_type变量,赋值为-1,相当于是把最大的无符号数赋值给了他。
二、string类的构造函数1、basic_string的构造函数与char特化版本的string构造函数的差别,只在于basic_string构造函数多了一个用于分配内存的默认形参const Allocator& a=Allocator(); 比如string类的构造函数string(const char *s);其对应的basic_string 构造函数形式为basic_string(const charT* s, const Allocator& a=Allocator());2、string类有6种形式的构造函数,本文使用basic_string类模板简化后的string构造函数版本。
1)、原型1:string();意义:创建一个默认的string对象,长度为0。
示例:string s; 表示创建一个长度为0的字符串对象s。
2)、原型2:string(const char *s);意义:将string对象初始化为s指向的传统C风格字符串(即以空字符结束的字符串)。
示例:string s(“hyong”);则结果为s=”hyong”。
3)、原型3:string(size_type n,char c);意义:创建一个包含n个元素的string对象,其中每个元素都被初始化为字符c。
示例:string s(4, ‘c’);则结果为s=”aaaa”。
4)、原型4:string(const string &str, size_type pos=0, size_type n=npos); //这是复制构造函数。
意义1:将string对象初始化为str中从pos开始的n个字符,或从pos开始到结尾的字符,其中npos表示string对象的最大长度。
示例1:string s=”ABCDEFG”; string s1(s,2,4);则结果s1=”CDEF”; 再如string s2(s,2);结果为s2=”CDEFG”;意义2:该构造函数的默认值形式为复制构造函数,经常被用于创建一个已存在的string对象的副本,示例2:string s=”CDEF”; string s1(s); 则s1=s=”CDEF”意义3:若指定的字符个数大于源字符串的长度,则使用源字符串到末尾的字符初始化目标string对象,示例3:string s(“ABDE”); string s1(s,0,22);则s1=”ABDE”;意义4:pos的值不能大于源字符串的长度,否则抛出out_of_range异常。
示例4:string s(“ABCD”); string s1(s,22);错误5)、原型5:string(const char *s, size_type n);意义:将string对象初始化为s指向的传统C字符串中的前n个字符,即使超出了字符串的范围,操作仍会进行。
示例:char c[]=”hyong”; string s(c, 5);结果为s=”hyong”。
注意即使复制的长度超出了数组的长度,操作仍将进行,也就是说如果把5改为10的话,将导致5个无用的字符被复制到对象中。
6)、原型6:tempalte<class Iter>string(Iter begin, Iter end);意义:将string对象初始化为[begin, end)间的字符,其中begin和end类似于指针用于指定位置,范围包括begin在内,但不包括end,注意不包括end。
还要注意begin和end被看着指针,该方法可用于数组、字符串和STL容器。
示例1:char c[ ]=”hyongilfmm”; string s(c+2, c+4); 结果s=”on”表示使用从指针c指向的字符串”hyongilfmmm”,位于区间[2,4)的字符”on”初始化s,注意第4个字符不包括在内。
注意,字符串从0开始计数。
示例2:string a=”hyong”;string b(a+3, a+5);是错误的,因为begin和end被看着指针指向的某一位置,而a 是string类对象,而不是指针,所以a+3没有意义,所以这里应这样string b(&a[3], &a[5])表示的是指针所指区间[&a[3], &a[5])之内的字符,相当于是从&a[3]开始的&a[5]-&a[3]个字符。
注意&a+3与&a[3]表示的是不同的意义,&a;表示string对象的地址,&a[3]表示string对象”hyong”中第3个字符所在位置的地址。
三、string类对象的特点1、不能用单个字符来初始化string对象,比如string a=’d’;将是错误的,但是string a(1,’d’)是正确的,这里将把’d’初始化为”d”。
2、string对象只能接收以空字符结尾的字符串,比如语句char b[ ]={‘a’, ‘b’, ‘c’}; string a=b;将是错误的。
3、不能将string对象的字符串赋值给char类型的数组或指针,因为他们是两个不同的类型。
四、string对象的输出输出1、 string对象的输入:可以使用cin和getline函数对string对象进行输入,注意:此处的geline函数不是istream流的成员函数。