C++ string类专题(修订版)

合集下载

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()的用法

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版

深入学习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++课程设计之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类的常用方法

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)专题知识讲座

第4章串(String)(2)专题知识讲座
24
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类是一种在编程中常用的数据类型。

它是一种不可改变的字符序列,即一旦创建,就不能修改。

string类的特点如下:
1. 不可修改:string类的对象在创建后不能被修改。

如果需要修改一个字符串,需要创建一个新的字符串对象。

这个特点保证了字符串的安全性和稳定性。

2. 可以进行各种操作:尽管string类的对象不可修改,但是我们可以对字符串进行各种操作,比如拼接、查找、替换等。

这些操作会生成一个新的字符串对象并返回,不会修改原有的字符串。

3. 字符串连接使用"+"运算符:string类支持使用"+"运算符进行字符串连接操作。

可以将两个或多个字符串连接在一起,生成一个新的字符串。

4. 常用的字符串操作方法:string类提供了许多常用的方法,用于字符串的操作和处理,比如获取字符串的长度、截取子串、转换大小写等。

5. 字符串是不可变的:由于字符串的不可修改性,每次对字符串进行操作时都会重新生成一个新的字符串对象。

这样可能会造成内存的浪费,特别是在进行大量操作的情况下。

总的来说,string类提供了方便的字符串操作方法,但是由于不可修改的特性,需要在使用时注意避免频繁地生成新的字符串对象,以减少内存占用。

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"。

string的各种函数(系统学习)

string的各种函数(系统学习)

string的各种函数(系统学习)1、按照⾯向对象的要求,可以把字符串看作⼀个对象,设计⼀个串类加以描述。

但是,在⼀般的情况下不必建⽴⾃⼰的串类,c++标准在库<string>中给出了类string,提供了丰富的串操作,程序员使⽤指令: #include<string>即存取这个类。

可将类string视为⼀个容器类,其部分操作如下:构造函数:string s:构造⼀个空串sstring s(a):构造串s,并⽤字符数组a初始化string s(a,n):构造串s,⽤字符数组a的前n个字符初始化string s(str):⽤串str构造串s(拷贝初始化)看下⾯代码验证#include<iostream>#include<string.h>#include<map>#include<cstdio>#include<cstring>#include<stdio.h>#include<cmath>#include<ctype.h>#include<math.h>#include<algorithm>#include<set>#include<queue>typedef long long ll;using namespace std;const ll mod=1e9+7;const int maxn=1e5+10;const int maxk=3e5+10;const int maxx=1e4+10;const ll maxe=1000+10;#define INF 0x3f3f3f3f3f3f#define Lson l,mid,rt<<1#define Rson mid+1,r,rt<<1|1int main(){char a[maxn];cin>>a;//输⼊abcdefghstring s(a);//结果为abcdefghstring s1(a,5);//结果为abcdestring s2(s1);//结果为abcdecout<<s<<endl;cout<<s1<<endl;cout<<s2<<endl;return0;}输⼊输出:getline(cin,s,delim):从cin中提取字符存⼊串s中,当遇到delim或者提取的字符个数等于s的长度时结束,如果⾃⼰不设定,默认为'\n' getline(cin,s):遇到'\n'结束cin>>s:遇到空⽩字符终⽌提取,空⽩字符不被读取cout<<s:输出s#include<iostream>#include<string.h>#include<map>#include<cstdio>#include<cstring>#include<stdio.h>#include<cmath>#include<ctype.h>#include<math.h>#include<algorithm>#include<set>#include<queue>typedef long long ll;using namespace std;const ll mod=1e9+7;const int maxn=1e5+10;const int maxk=3e5+10;const int maxx=1e4+10;const ll maxe=1000+10;#define INF 0x3f3f3f3f3f3f#define Lson l,mid,rt<<1#define Rson mid+1,r,rt<<1|1int main(){string s;while(getline(cin,s,'#')){getchar();//⾃⼰指定了字符要加getchar,不然结果会多出⼀个换⾏,但是默认情况下不⽤加getcharcout<<s<<endl;}return0;}操作符:s=val:赋值操作,val可以是⼀个串,⼀个字符或⼀个字符数组s+=val:将val添加到串s之后s[pos]:下标操作s+t,t+s:s和t的连接,返回连接的结果。

C++中string,wstring,CString常用方法

C++中string,wstring,CString常用方法

C++中string,wstring,CString常⽤⽅法⼀.概念 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳⼊C++标准之中.wstring是操作宽字符串的类.C++标准程序库对于string的设计思维就是让他的⾏为尽可能像基本类型,不会在操作上引起什么⿇烦。

CString是对string(字符串)和wstring(宽字符串)的⼀个封装,常⽤在mfc中.⽤来解决编码问题的. string/wstring和CString在使⽤中,要根据实际环境选取。

CString是MFC⾥的,string是STL⾥的,后者通⽤性强些,前者功能全些。

⼀般在mfc中使⽤CString更为好⼀些。

⼆.常⽤⽅法string/wstring常⽤⽅法:string类的构造函数:string(const char *s); //⽤const字符串s初始化string(int n,char c); //⽤n个字符c初始化此外,string类还⽀持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。

当构造的string太长⽽⽆法表达时会抛出length_error异常;string类的字符操作:const char &operator[](int n)const;const char &at(int n)const;char &operator[](int n);char &at(int n);operator[]和at()均返回当前字符串中第n个字符的位置,但at函数提供范围检查,当越界时会抛出out_of_range异常,下标运算符[]不提供检查访问。

const char *data()const;//返回⼀个⾮null终⽌的c字符数组const char *c_str()const;//返回⼀个以null终⽌的c字符串int copy(char *s, int n, int pos = 0) const;//把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数⽬string的特性描述:int capacity()const; //返回当前容量(即string中不必增加内存即可存放的元素个数)int max_size()const; //返回string对象中可存放的最⼤字符串的长度int size()const; //返回当前字符串的⼤⼩int length()const; //返回当前字符串的长度bool empty()const; //当前字符串是否为空void resize(int len,char c);//把字符串当前⼤⼩置为len,并⽤字符c填充不⾜的部分string类的输⼊输出操作:string类重载运算符operator>>⽤于输⼊,同样重载运算符operator<<⽤于输出操作。

c string类的常用方法

c string类的常用方法

c string类的常用方法在C语言中,字符串通常表示为字符数组,而不是像C++那样有专门的字符串类。

但C标准库中提供了一些用于操作和处理字符串的函数。

以下是其中的一些常用方法:1. strcpy():将一个字符串复制到另一个字符串。

```cchar str1[50];strcpy(str1, "Hello, World!");```2. strcat():将一个字符串连接到另一个字符串的末尾。

```cchar str1[50] = "Hello, ";strcat(str1, "World!");```3. strlen():返回字符串的长度,不包括终止字符'\0'。

```cchar str[] = "Hello, World!";printf("%d", strlen(str)); // 输出 13```4. strcmp():比较两个字符串。

```cchar str1[] = "Hello";char str2[] = "World";if (strcmp(str1, str2) < 0) {printf("%s is less than %s\n", str1, str2);} else if (strcmp(str1, str2) > 0) {printf("%s is greater than %s\n", str1, str2); } else {printf("%s is equal to %s\n", str1, str2);}```5. strstr():在字符串中查找子串。

```cchar str[] = "Hello, World!";char sub[] = "World";char result = strstr(str, sub);if (result != NULL) {printf("Found '%s' in '%s'\n", sub, str);} else {printf("Did not find '%s' in '%s'\n", sub, str); }```6. sprintf():将格式化的数据写入字符串。

(完整版)C语言字符串操作总结大全(超详细)

(完整版)C语言字符串操作总结大全(超详细)
功能:将字符串source接到字符串target的后面
例程:
#include <iostream.h>
#include <string.h>
void main(void)
{
char str1[] = { "Tsinghua "};
char str2[] = { "Computer"};
cout <<strcpy(str1,str2)<<endl;
strncpy(char destination[], const char source[], int numchars);
strncpy:将字符串source中前numchars个字符拷贝到字符串destination中。
strncpy函数应用举例
原型:strncpy(char destination[], const char source[], int numchars);
C语言字符串操作总结大全(超详细)
1)字符串操作
strcpy(p, p1)复制字符串
strncpy(p, p1, n)复制指定长度字符串
strcat(p, p1)附加字符串
strncat(p, p1, n)附加指定长度字符串
strlen(p)取字符串长度
strcmp(p, p1)比较字符串
strcasecmp忽略大小写比较字符串
查找字串string中首次出现的位置, NULL结束符也包含在查找中.返回一个指针,指向字符c在字符串string中首次出现的位置,如果没有找到,则返回NULL.
char *strrchr(const char *string, int c);

c++ 字符串编程题

c++ 字符串编程题

c++ 字符串编程题C++ 字符串编程题是一类常见的编程题目,涉及到字符串的基本操作、处理和算法。

以下是一些关于 C++ 字符串编程题的参考内容,包括字符串的初始化、读取、比较、替换、查找、截取、转换等操作,以及一些常见的字符串算法和技巧。

1. 字符串初始化和读取- 字符串的初始化:可以使用字符数组或字符串类(C++ 的string 类)来初始化字符串,如:char str[100] = "Hello World"; string str = "Hello World";- 字符串的输入:可以使用 cin 来读取字符串,如:cin >> str;- 字符串的输出:可以使用 cout 来输出字符串,如:cout << str;2. 字符串比较和拼接- 字符串的比较:可以使用 strcmp 函数来比较两个字符串的大小,如:int result = strcmp(str1, str2);- 字符串的拼接:可以使用 strcat 函数来将两个字符串拼接在一起,如:strcat(str1, str2);3. 字符串替换和查找- 字符串的替换:可以使用 string 类的 replace 函数来替换字符串中的指定部分,如:str.replace(start_pos, length, new_str);- 字符串的查找:可以使用 string 类的 find 函数来查找字符串中的指定子串,如:int pos = str.find(sub_str);4. 字符串截取和转换- 字符串的截取:可以使用 string 类的 substr 函数来截取字符串的指定部分,如:string sub_str = str.substr(start_pos, length); - 字符串的转换:可以使用 stoi、stof、to_string 等函数将字符串转换为对应的整数、浮点数或字符串类型。

c,,实验报告,用string类申明字符串对象实现数组的转置

c,,实验报告,用string类申明字符串对象实现数组的转置

c,,实验报告,用string类申明字符串对象实现数组的转置C++程序设计实验报告C++实验报告实验一1. 实验要求(1)编写一个函数把华氏温度转换为摄氏温度,转换公式如下C=(F-32)*5/9(2)编写重载函数Max1可分别求两个整数,三个整数,两个双精度数,三个双精度数的最大值。

(3)使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h。

(4)用递归的方法编写函数求Fibonacci级数,观察递归调用的过程2. 实验内容及实验步骤(1)编写函数float Convert(float TempFer),参数和返回值都为float类型,实现算法C=(F-32)*5/9,在main()函数中实现输入、输出。

程序名:lab3_1.cpp。

(2)分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。

程序名:lab3_2.cpp(3)在main()函数中提示输入两个整数x、y,使用cin语句得到x、y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。

程序名:lab3_4.cpp(4)编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。

公式为fib(n)=fib(n-1)+fib(n-2),n2;fib(1)=fib(2)=1。

使用if语句判断函数的出口,在程序中用cout语句输出提示信息。

程序名:(转载于: 写论文网:c,,实验报告,用string类申明字符串对象实现数组的转置)lab3_5.cpp(5)使用debug中的Step Into追踪到函数内部,观察函数的调用过程。

3.源程序Lab3_1#includeiostreamusing namespace std;float fun(float x){ float y;y=(x-32)*5/9;return y;}void main(){ float f,c;cout请输入华氏温度: ;cinf;c=fun(f);cout对应的摄氏温度为: cendl; }运行结果Lab3_2#includeiostreamusing namespace std;int Max1(int x,int y){ return (xy?x:y);}int Max1(int x,int y,int z){ int h,k;h=(xy?x:y);k=(hz?h:z);return k;}double Max1(double x,double y) {return (xy?x:y);}double Max1(double x,double y,double z) { double h,k;h=(xy?x:y);k=(hz?h:z);return k;}void main(){ int i,j,k;double l,m,n;cout请输入两个整数: ;cinij;cout最大数为: Max1(i,j)endl;cout请输入三个整数: ;cinijk;cout最大数为: Max1(i,j,k)endl;cout请输入两个双精度数: ;cinlm;cout最大数为: Max1(l,m)endl;cout请输入三个双精度数: ;cinlmn;cout最大数为: Max1(l,m,n)endl;}运行结果Lab3_3#includeiostream#includecmathusing namespace std; void main(){ double p,x,y;cinxy;p=pow(x,y);coutpendl;}运行结果Lab3_4#includeiostream.hint fib(int n);int main(){int n,answer;coutEnter number:endl; cinn;cout\n\n;answer=fib(n);coutansweris thenth Fibonacci number\nendl;return 0;}int fib(int n){coutProcessing fib(n)…endl;if(n3){coutReutrn 1!\n;return(1);}elsecoutCall fib(n-2)and fib(n-1).\nendl;return(fib(n-2)+fib(n-1));}运行结果4.实验体会其实这次实验涉及C++的内容并不多,主要练习的只是C++中的输入输出和重载函数的应用。

string类练习题

string类练习题

string类练习题String类是Java中常用的字符串处理类之一,具有丰富的方法和功能,可以满足各种字符串处理需求。

下面将给出一些关于String类的练习题,帮助读者熟悉和掌握这个类的使用。

1. 字符串长度计算和比较编写一个程序,要求从控制台输入两个字符串,然后分别计算它们的长度并输出。

最后比较这两个字符串的长度,如果相等则输出相等,否则输出不相等。

示例输入:请输入字符串1:Hello请输入字符串2:World示例输出:字符串1的长度为:5字符串2的长度为:5两个字符串长度不相等2. 字符串拼接编写一个程序,要求从控制台输入两个字符串,然后使用String 类提供的方法将这两个字符串拼接在一起,并输出结果。

示例输入:请输入字符串1:Hello请输入字符串2:World示例输出:拼接后的字符串为:HelloWorld3. 字符串查找编写一个程序,要求从控制台输入一个字符串和一个目标子串,然后使用String类提供的方法在输入的字符串中查找目标子串,并输出查找结果(找到返回位置索引,找不到返回-1)。

示例输入:请输入字符串:Hello World请输入目标子串:World示例输出:目标子串在字符串中的位置索引为:64. 字符串切割编写一个程序,要求从控制台输入一个字符串和一个分隔符,然后使用String类提供的方法将输入的字符串按照分隔符进行切割,并输出切割结果。

示例输入:请输入字符串:Hello,World,Java请输入分隔符:,示例输出:切割结果:HelloWorldJava5. 字符串替换编写一个程序,要求从控制台输入一个字符串、一个目标子串和一个替换子串,然后使用String类提供的方法将目标子串在输入的字符串中全部替换为替换子串,并输出替换后的结果。

示例输入:请输入字符串:Hello Java请输入目标子串:Java请输入替换子串:World示例输出:替换后的字符串为:Hello World通过完成以上练习题,读者可以加深对String类的理解和应用,提高字符串处理的能力,为日后在编写Java程序时处理字符串问题提供帮助。

C语言头文件大全修订版

C语言头文件大全修订版

C语言头文件大全修订版IBMT standardization office【IBMT5AB-IBMT08-IBMT2C-ZZT18】标准C语言头文件ISO C标准定义的头文件(24项)<assert.h> 验证程序断言<complex.h>?支持复数算术运算<ctype.h>?字符类型<errno.h>?出错码<fenv.h>?浮点环境<float.h>?浮点常量<inttypes.h>?整型格式转换<iso646.h> 替代关系操作符宏<limits.h>?实现常量<locale.h>?局部类别<math.h>?数学常量<setjmp.h> 非局部goto<signal.h>?信号<stdarg.h>?可变参数表<stdbool.h>?布尔类型和值<stddef.h>?标准定义<stdint.h>?整型<stdio.h>?标准I/O库<stdlib.h>?实用程序库函数<string.h>?字符串操作<tgmath.h>?通用类型数学宏<time.h>?时间和日期<wchar.h>?宽字符支持<wctype.h>?宽字符分类和映射支持POSIX标准定义的必须的头文件(26项)<dirent.h>?目录项<fcntl.h>?文件控制<fnmatch.h>?文件名匹配类型<glob.h>?路径名模式匹配类型<grp.h>?组文件<netdb.h>?网络数据库操作<pwd.h> 口令文件<regex.h>?正则表达式<tar.h>?tar归档值<termios.h>?终端I/O <unistd.h>?符号常量<utime.h>?文件时间<wordexp.h>?字扩展类型<arpa/inet.h>?Internet定义<net/if.h>?套接字本地接口<netinet/in.h> Internet地址族 <netinet/tcp.h>?传输控制协议<sys/mman.h>?内存管理声明<sys/select.h>?select函数<sys/socket.h>?套接字接口<sys/stat.h>?文件状态<sys/times.h>?进程时间<sys/types.h>?基本系统数据类型<sys/un.h>?UNIX域套接字定义<sys/utsname.h>系统名<sys/wait.h>?进程控制POSIX标准定义的XSI扩展头文件(26项)<cpio.h> cpio归档值<dlfcn.h>?动态链接<fmtmsg.h>?消息显示结构<ftw.h>?文件树漫游<iconv.h>?代码集转换实用程序<langinfo.h>?语言信息常量<libgen.h>?模式匹配函数定义<monetary.h>?货币类型<ndbm.h>?数据库操作<nl_types.h>?消息类别<poll.h>?轮询函数<search.h>?搜索表<strings.h>?字符串操作<syslog.h>?系统出错日志记录<ucontext.h>?用户上下文<ulimit.h>?用户限制<utmpx.h>?用户帐户数据库<sys/ipc.h> IPC<sys/msg.h>?消息队列<sys/resource.h> 资源操作<sys/sem.h>?信号量<sys/shm.h>?共享存储<sys/statvfs.h>?文件系统信息<sys/time.h>?时间类型<sys/timeb.h>?附加的时间<sys/uio.h>?矢量I/O操作POSIX标准定义的可选头文件(8项)<aio.h>?异步I/O <mqueue.h>?消息队列<pthread.h>?线程<sched.h>?执行调度<semaphore.h> 信号量<spawn.h>?实时spawn接口<stropts.h>?XSI STREAMS接口<trace.h>?时间跟踪标准 C++ 语言头文件(54个其中16个用于构建STL,3个为附加非必须)<algorithm> STL通用算法<bitset> STL位集容器<cassert>?用于在程序运行时执行断言<cctype> 字符处理<cerrno> 错误码<cfloat>?用于测试浮点类型属性<ciso646>?ISO646变体字符集<climits>?测试整数类型属性<clocale> 本地化函数<cmath> 数学函数<complex> 复数类<csetjmp>?执行非内部的goto语句<csignal>?信号<cstdarg>?访问参数数量变化的函数<cstddef>?用于定义实用的类型和宏<cstdio> 输入/输出<cstdlib> 杂项函数及内存分配<cstring> 字符串<ctime> 时间<cwchar> 宽字符处理及输入/输出<cwctype> 宽字符分类<deque> STL双端队列容器<exception> 异常处理类<fstream> 文件流<functional> STL函数对象<iomanip> 参数化输入/输出<ios> 基本输入/输出支持<iosfwd> 输入/输出前置声明<iostream> 数据流输入/输出<istream> 基本输入流<iterator> 遍历序列的类<limits> 各种数据类型最值常量<list> STL 线性列表容器<locale> 国际化支持<map> STL映射容器<memory> 专用内存分配器<new> 基本内存分配和释放? <numeric> 通用的数字操作<ostream> 基本输出流<queue> STL 队列容器<set> STL 集合容器<sstream> 基于字符串的流<stack> STL 堆栈容器<stdexcept> 标准异常类<streambuf> iostream 的缓冲区类<string> 字符串类<strstream>?非内存字符序列的流类<typeinfo> 运行时类型标识<utility> STL 通用模板类<valarray>?支持值数组的类和模版类<vector> STL 动态数组容器标准C++附加的头文件(3个)非必须<hash_map> <hash_set><slist>The Standard C++ library consists of 51 required headers.This implementation also includes three additional headers,<hash_map>,<hash_set>,and <slist>,not required by the C++ Standard, for a total of 54 headers.Of these 54 headers,16 constitute the Standard Template Library, or STL.These are indicated below with the notation<algorithm> -- (STL) for defining numerous templates that implement useful algorithms<bitset> -- for defining a template class that administers sets of bits<complex> -- for defining a template class that supports complex arithmetic <deque> -- (STL) for defining a template class that implements a deque container<exception> -- for defining several functions that control exception handling <fstream> -- for defining several iostreams template classes that manipulate exteral files<functional>-- (STL) for defining several templates that help construct predicates forthe templates defined in <algorithm> and <numeric><hash_map> -- (STL) for defining template classes that implement hashed associative containersthat map keys to values<hash_set> -- (STL) for defining template classes that implement hashed associative containers<iomanip> -- for declaring several iostreams manipulators that take an argument<ios> -- for defining the template class that serves as the base for many iostreams classes<iosfwd> -- for declaring several iostreams template classes before they are necessarilydefined<iostream> -- for declaring the iostreams objects that manipulate the standard streams<istream> -- for defining the template class that performs extractions<iterator> -- (STL) for defining several templates that help define and manipulate iterators<limits> -- for testing numeric type properties<list>-- (STL) for defining a template class that implements a doubly linked list container<locale> -- for defining several classes and templates that controllocale-specific behavior, as in the iostreams classes<map>-- (STL) for defining template classes that implement associative containers thatmap keys to values<memory>-- (STL) for defining several templates that allocate and free storage for variouscontainer classes<new> -- for declaring several functions that allocate and free storage<numeric>-- (STL) for defining several templates that implement useful numeric functions<ostream> -- for defining the template class that performs insertions<queue> -- (STL) for defining a template class that implements a queue container<set>-- (STL) for defining template classes that implement associative containers<slist>-- (STL) for defining a template class that implements a singly linked list container<sstream> -- for defining several iostreams template classes that manipulate string containers<stack> -- (STL) for defining a template class that implements a stack container<stdexcept> -- for defining several classes useful for reporting exceptions<streambuf> -- for defining template classes that buffer iostreams operations <string> -- for defining a template class that implements a stringcontainer<strstream> -- for defining several iostreams classes that manipulate in-memory charactersequences<typeinfo> -- for defining class type_info, the result of the typeid operator <utility>-- (STL) for defining several templates of general utility<valarray> -- for defining several classes and template classes that support value-orientedarrays<vector>-- (STL) for defining a template class that implements a vector container新的C标准库<cassert> -- for enforcing assertions when functions execute<cctype> -- for classifying characters<cerrno> -- for testing error codes reported by library functions<cfloat> -- for testing floating-point type properties<ciso646> -- for programming in ISO 646 variant character sets<climits> -- for testing integer type properties<clocale> -- for adapting to different cultural conventions<cmath> -- for computing common mathematical functions<csetjmp> -- for executing nonlocal goto statements<csignal> -- for controlling various exceptional conditions<cstdarg> -- for accessing a varying number of arguments<cstddef> -- for defining several useful types and macros<cstdio> -- for performing input and output<cstdlib> -- for performing a variety of operations<cstring> -- for manipulating several kinds of strings<ctime> -- for converting between various time and date formats<cwchar> -- for manipulating wide streams and several kinds of strings <cwctype> -- for classifying wide characters旧的C标准库<assert.h> -- for enforcing assertions when functions execute<ctype.h> -- for classifying characters<errno.h> -- for testing error codes reported by library functions<float.h> -- for testing floating-point type properties<iso646.h> -- for programming in ISO 646 variant character sets<limits.h> -- for testing integer type properties<locale.h> -- for adapting to different cultural conventions<math.h> -- for computing common mathematical functions<setjmp.h> -- for executing nonlocal goto statements<signal.h> -- for controlling various exceptional conditions<stdarg.h> -- for accessing a varying number of arguments<stddef.h> -- for defining several useful types and macros<stdio.h> -- for performing input and output<stdlib.h> -- for performing a variety of operations<string.h> -- for manipulating several kinds of strings<time.h> -- for converting between various time and date formats<wchar.h> -- for manipulating wide streams and several kinds of strings<wctype.h> -- for classifying wide charactersFinally, in this implementation, the Standard C++ library also includes several headers for compatibility with traditional C++ libraries:<fstream.h> -- for defining several iostreams template classes that manipulate exteral files<iomanip.h> -- for declaring several iostreams manipulators that take an argument<iostream.h> -- for declaring the iostreams objects that manipulate the standard streams<new.h> -- for declaring several functions that allocate and free storage <stl.h> -- for declaring several template classes that aid migration from older versionsof the Standard Template Library。

c 有string类型的基础知识选择题

c 有string类型的基础知识选择题

c 有string类型的基础知识选择题全文共四篇示例,供读者参考第一篇示例:在C语言中,虽然没有内置的string类型,但我们可以使用字符数组来表示字符串。

下面是一些关于C语言中string类型基础知识的选择题:1. 在C语言中表示字符串的最常见方法是使用什么数据类型?A. intB. floatC. charD. double答案:C2. 下面哪种声明方式可以正确定义一个字符数组来存储字符串"Hello"?A. char str[6] = "Hello";B. char str[5] = "Hello";C. char str[] = "Hello";D. char str[5] = {'H', 'e', 'l', 'l', 'o'};4. 下面哪个函数用于计算字符串的长度?A. strlen()B. strcpy()C. strcat()D. strcmp()9. 字符串"Hello World"的长度是多少?A. 10B. 11C. 12D. 13第二篇示例:1. 在C语言中,字符串类型是以哪种方式进行表示的?A. 数组B. 结构体C. 指针D. 链表2. 下列哪种数据类型用于表示字符串的结尾?A. charB. intC. floatD. null4. 下列哪个函数用于比较两个字符串是否相等?A. strlen()B. strcpy()C. strcmp()D. strcat()11. 在C语言中,如何声明一个字符串变量?A. char str;B. char *str[];C. char str[];D. char *str;12. 下列哪个语句用于初始化一个字符串变量?A. str = "hello";B. strcpy(str, "hello");C. str = {'h', 'e', 'l', 'l', 'o', '\0'};D. str = "hello\0";15. 在C语言中,如何将一个整数转换为字符串?A. itoa()B. atoi()C. atof()D. sprintf()答案:1. A2. D3. D4. C5. A6. B7. D8. D9. D10. A11. D12. B13. A14. A15. D希望以上选择题能帮助大家更好地了解C语言中关于字符串类型的基础知识。

C语言字符串操作总结大全(超详细)

C语言字符串操作总结大全(超详细)

C语⾔字符串操作总结⼤全(超详细)strcpy(p, p1) 复制字符串strncpy(p, p1, n) 复制指定长度字符串strcat(p, p1) 附加字符串strncat(p, p1, n) 附加指定长度字符串strlen(p) 取字符串长度strcmp(p, p1) ⽐较字符串strcasecmp忽略⼤⼩写⽐较字符串strncmp(p, p1, n) ⽐较指定长度字符串strchr(p, c) 在字符串中查找指定字符strrchr(p, c) 在字符串中反向查找strstr(p, p1) 查找字符串strpbrk(p, p1) 以⽬标字符串的所有字符作为集合,在当前字符串查找该集合的任⼀元素strspn(p, p1) 以⽬标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任⼀元素的偏移strcspn(p, p1) 以⽬标字符串的所有字符作为集合,在当前字符串查找属于该集合的任⼀元素的偏移* 具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符strtod(p, ppend) 从字符串 p 中转换 double 类型数值,并将后续的字符串指针存储到 ppend 指向的 char* 类型存储。

strtol(p, ppend, base) 从字符串 p 中转换 long 类型整型数值,base 显式设置转换的整型进制,设置为 0 以根据特定格式判断所⽤进制,0x, 0X 前缀以解释为⼗六进制格式整型,0 前缀以解释为⼋进制格式整型atoi(p) 字符串转换到 int 整型atof(p) 字符串转换到 double 符点数atol(p) 字符串转换到 long 整型isalpha() 检查是否为字母字符isupper() 检查是否为⼤写字母字符islower() 检查是否为⼩写字母字符isdigit() 检查是否为数字isxdigit() 检查是否为⼗六进制数字表⽰的有效字符isspace() 检查是否为空格类型字符iscntrl() 检查是否为控制字符ispunct() 检查是否为标点符号isalnum() 检查是否为字母和数字isprint() 检查是否是可打印字符isgraph() 检查是否是图形字符,等效于 isalnum() | ispunct()功能:将字符串source拷贝到字符串destination中例程:#include <iostream.h>#include <string.h>void main(void){ char str1[10] = { "TsinghuaOK"}; char str2[10] = { "Computer"}; cout <<strcpy(str1,str2)<<endl;}运⾏结果是:Computer第⼆个字符串将覆盖掉第⼀个字符串的所有内容!注意:在定义数组时,字符数组1的字符串长度必须⼤于或等于字符串2的字符串长度。

c++ string类型的各种函数

c++ string类型的各种函数

c++ string类型的各种函数C++中的string类型是标准库提供的一个字符串类,它有许多实用的函数和方法。

以下是一些常用的string类型函数:1.构造函数和析构函数:○默认构造函数:string(),创建一个空字符串。

○拷贝构造函数:string(const string &str),创建一个与str 相同的字符串。

○字符串字面值构造函数:string("string_literal"),创建一个字符串字面值的副本。

○初始化列表构造函数:string(char c, int n),创建一个包含n个字符c的字符串。

2.字符串操作函数:○+:字符串连接操作,string s1 + s2。

○+=:字符串连接赋值操作,s1 += s2。

○[]:字符串切片操作,string s[begin, end)。

○at:字符串切片操作,string s.at(n)。

○find:查找子字符串在字符串中的位置,size_t find(const string &substr)。

○rfind:从字符串末尾开始查找子字符串的位置,size_t rfind(const string &substr)。

○substr:提取字符串的一部分,string substr(size_t pos, size_t len)。

○insert:在指定位置插入字符或子字符串,void insert(size_t pos, char c)或void insert(size_t pos, const string &substr)。

○erase:删除字符串中的字符或子字符串,void erase(size_t pos, size_t len)。

○replace:替换字符串中的子字符串,void replace(size_t pos, size_t len, const string &substr)。

C++string字符串修改和替换方法详解

C++string字符串修改和替换方法详解

C++string字符串修改和替换⽅法详解字符串内容的变化包括修改和替换两种。

本节将分别讲解字符串内容的修改和字符串内容的替换。

字符串内容的修改可以通过使⽤多个函数修改字符串的值。

例如 assign(),operator=,erase(),交换(swap),插⼊(insert)等。

另外,还可通过 append() 函数添加字符。

下⾯逐⼀介绍各成员函数的使⽤⽅法。

assign()函数使⽤ assign() 函数可以直接给字符串赋值。

该函数既可以将整个字符串赋值给新串,也可以将字符串的⼦串赋值给新串。

其在 basic_string 中的原型为:basic_string& assign (const E*s); //直接使⽤字符串赋值basic_string& assign (const E*s, size_type n);basic_string& assign (const basic_string & str, size_type pos, size_type n);//将str的⼦串赋值给调⽤串basic_string& assign (const basic_string& str); //使⽤字符串的“引⽤”賦值basic_string& assign (size_type n, E c) ; //使⽤ n个重复字符賦值basic_string& assign (const_iterator first, const_iterator last); //使⽤迭代器赋值以上⼏种⽅法在例 1 中均有所体现。

请读者参考下述代码。

【例 1】#include <iostream>#include <string>using namespace std;int main(){string str1 ("123456");string str;str.assign (str1); //直接赋值cout << str << endl;str.assign (str1, 3, 3); //赋值给⼦串cout << str << endl;str.assign (str1,2,str1.npos);//赋值给从位置 2 ⾄末尾的⼦串cout << str << endl;str.assign (5,'X'); //重复 5 个'X'字符cout << str << endl;string::iterator itB;string::iterator itE;itB = str1.begin ();itE = str1.end();str.assign (itB, (--itE)); //从第 1 个⾄倒数第 2 个元素,赋值给字符串 strcout << str << endl;return 0;}operator= 函数operator= 的功能就是赋值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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流的成员函数。

相关文档
最新文档