目录
一.字符数组表示
1.一维字符数组
1)类似数组,有长度可以不用初始化,有初始化可以不用长度
2)特殊:将字符串初始化给字符数组时,最后添加 ‘\0’ 作为结束标志,如:
char a[]={"Hello"}; 相当于char a[]={'H','e','l','l','o','\0'};长度为6
若将单个字符初始化则不会出现,如:char a[]={'H','e','l','l','o'};长度为5
2.多维字符数组
1)类似数组,有长度可以不用初始化,有初始化可以不用长度
2)特殊:一字符串形式初始化,每个字符串最后都要加上‘\0’
3.字符数组处理函数
头文件<cstring>
1)strcpy函数
strcpy(str1,str2) //将str2复制给str1
strncpy(str1,str2,n) //将str2的前n个字符复制给str1
char str1[]="Hello";
char str2[]="Good Bye";
strcpy(str1,str2);
cout<<str1<<endl;
2)strcat函数
strcat(str1,str2) //将str2添加到str1末尾
strncat(str1,str2) //将str2的前n个字符添加到str1末尾
char str1[]="Hello";
char str2[]="Good Bye";
strcat(str1,str2);
cout<<str1<<endl;
3)strcmp函数
strcmp(str1,str2) //比较两个字符串大小
strncmp(str1,str2) //比较两字符串前n个字符
stricmp(str1,str2) //忽略大小写进行比较
//Windows中用stricmp,Linux中用strcase
/*若完全相等,返回0;若前面字符相等,而str1长度>str2长度,按str1>str2处理;
若str1>str2,返回一个正数(不一定为1);若str1<str2,返回一个负数(不一定为-1)
比较方法:从第一个字符开始比较,相等则往后比较,谁的ASCII码大,则谁大*/
char str1[]="Hello";
char str2[]="Good Bye";
int m=strcmp(str1,str2);
cout<<m<<endl;
4)strlen函数
strlen(str1) //计算str1的长度
char str1[]="Hello";
int l=strlen(str1);
cout<<l<<endl;
5)puts函数
puts(str) //输出字符串,注意最后有\0,会自动换行
char str1[]="Hello";
puts(str1);
6)gets函数
gets(str) //输入字符串,以回车作为结束
char str1[5];
gets(str1);
puts(str1);
二.string类型表示
1.定义与初始化
1)头文件#include<string>
2)与字符数组不同,最后没有'\0'
2.字符串常用处理
1)相互赋值,如:str1=str2
2)对其中字符进行操作,如:
string word="HELLO"; word[2]='a'; 则变为HALLO
3)运算,如:str3=str1+str2 即将str2链接到str1后赋值给str3
4)复制:(string复制给char[])
str1.copy(str2,n,m)
//把字符数组str1中从m后复制n个字符到字符串str2
//注意:复制后会放在开头并替换原有字符
char str1[20]="Hello";
string str2="Bye";
str2.copy(str1,1,1);
cout<<str1<<endl;
//结果:yello
5)复制:(char[]赋值给string)
str2.assign(str1,n,m)
//将字符数组str1从m后的n个字符赋值给字符串str2
//注意:原有字符不保留
char str1[20]="Hello";
string str2="Bye";
str2.assign(str1,3,1);
cout<<str2<<endl;
//结果:ell
6)求长度
str.size() str.length()
//返回str的长度,二者没有区别
string str="Bye";
int n1=str.size();
int n2=str.length();
cout<<n1<<' '<<n2<<endl;
7)提取字符串
str2=str1.substr(n,m)
//提取字符串str1中n个后的m个字符赋值给字符串str2
string str1="GoodBye";
string str2=str1.substr(2,4);
cout<<str2<<endl;
//结果:odBy
8)查找字符串位置
str.find("str1")
//在str中查找str1字符串并返回其位置
//注意:返回位置需+1才为可见位置
string str1="GoodBye";
int n=str1.find("Bye");
cout<<n<<endl;
9)删除字符
str.erase(n,m)
//在字符串str中删除从n个后的m个字符
string str1="GoodBye";
str1.erase(4,3);
cout<<str1<<endl;
10)增加字符
str1.append(str2,n,m)
//在str1末尾增加str2中n个后的m个字符
string str1="GoodBye";
str1.append("0123",1,3);
cout<<str1<<endl;
//结果:GoodBye123
11)字符串替换
str1.replace(n1,m1,str2,n2,m2)
//将str1中n1个后的m1个字符删除,在n1后插入str2中n2后的m2个字符
string str1="GoodBye";
string str2="Hi Morning";
str1.replace(4,3,str2,3,7);
cout<<str1<<endl;
//结果:GoodMorning
12)字符串插入
str1.insert(n,str2,n1,m1)
//在str1的第n个字符后插入str2的n1后的m1个字符
string str1="GoodBye";
string str2="Hi Morning";
str1.insert(4,str2,3,7);
cout<<str1<<endl;
//结果:GoodMorningBye
3.字符串数组
类似字符数组,但每个字符串最后不包含‘\0’
string name[5]={"Zhang","Yang","Sun","Li","Wang"}