string类型的主要函数与运算
1、size()
求字符串长度,等同于length()函数。
例如:s="12 34";cout<<s.size();结果是:5。
2、getline(cin,s)
读入一整行(直到换行),包括读入空格。
3、substr(开始位置i,子串长度len)
取字符串的子串。当i+len超过原字符长度时,只取剩下的。注意:i要在字符串长度内。
例如:s="abcdef";cout<<s.substr(3,2)<<s.substr(3,20);结果是:dedef。
4、insert(插入位置i,插入字符串)
在字符串的第i个位置插入s。
例如:s="abcdef";cout<<s.insert(2,"+");结果是:ab+cdef。
5、erase(开始位置i,删除长度len)
删除字符串的第i个位置后的len个字符。
例如:s="abcdef";cout<<s.erase(2,3);结果是:abf。
6、replace(开始位置i,长度len,要换上的字符串ss)
用字符串ss替换字符串中i开始的长度为len的一段。
例如:s="abcdef";cout<<s.replace(2,1,"123");结果是:ab123def。
7、find(子串subs)
查找子串subs第1次出现的位置,没有找到返回string::npos。
find(子串subs,pos)
在s下标pos起查找子串subs第1次出现的位置。
例如:s="abcdef";cout<<s.find("cd");结果是:2。
find还有一些更强大的形式,比如在某一段查找、找最后的subs位置等。
8、empty()
若s为空,则返回true,否则返回false。
C语言版
在C的函数库中提供了一些用来处理字符串的函数。
1、puts(字符数组)
将一个字符串(以'\0'结束的字符序列)输出到终端。若已定义str是一个字符数组,该数组已被初始化为“China”,则
puts(str);
运行结果为:
China
用puts函数输出的字符串中可以包含转义字符。例如:
char s[]={"CCC\nAAA"};
printf("%s",s);
运行结果为:
CCC
AAA
'\n'为换行标志,'\0'为字符串结束标志,大家可以试一下。
2、gets(字符数组)
从终端输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址。函数调用如:
gets(str);
注意:用puts或gets函数只能输入或输出一个字符串,不能写成:puts(str1,str2)或gets(str1,str2)。
3、strcat(字符数组1,字符数组2)
连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。
例如:
char s1[30]={"Welcome to "},s2[]={"China"};
printf("%s\n",strcat(s1,s2));
运行结果:
Welcome to China
4、strcpy(字符数组1,字符串2)
它是“字符串拷贝函数”。作用是将字符串2拷贝到字符数组1中去。例如:
char s1[10],s2[]={"China"};
strcpy(s1,s2);
说明:
(1)“字符数组1”必须写成数组名形式(如 s1),“字符串2”可以是字数组名,也可以是一个字符串常量。例如:
strcpy(s1,"China");
(2)拷贝时连同字符串后面的'\0'一起拷贝到字符数组1中。
(3)不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。如下面是不合法的:
s1="China";
s1=s2;
而只能用strcpy函数处理。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。例如:
char a[5],c;
c='A';
a[0]='B';
5、strcmp(字符串1,字符串2)
作用是比较字符串1和字符串2。例如:
strcmp(str1,str2);
strcmp("China","Korea");
strcmp(str1,"Shanghai");
字符串比较的规则为:对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。比较的结果由函数值带回。
(1)如果字符串1=字符串2,函数值为0。
(2)如果字符串1>字符串2,函数值为一正整数。
(3)如果字符串1<字符串2,函数值为一负整数。
注意:对两个字符串比较,不能用以下形式:
if (str1==str2) printf("yes");
而只能用
if (strcmp(str1,str2)==0) printf("yes");
6、strlen(字符数组)
是测试字符串长度的函数。函数的值为字符串中实际长度,不包括'\0'在内。
例如:
char s[]="China";
printf("%d\n",strlen(s));
运行结果不是6,而是5。
7、strlwr(字符串)
将字符串中的大写字母转换成小写字母。lwr是lowercase(小写)的缩写。
8、strupr(字符串)
将字符串中的小写字母转换成大写字母。upr是uppercase(大写)的缩写。
例如:
#include <cstdio>
#include <cstring>
int main()
{
char s[]="Copywrite 1999-2000 GGV Technologies";
char *t=strlwr(s);
printf("%s\n",s);
strupr(s); //把s数组中的字符转换成大写
printf("%s\n",s);
// 注意:不能使用以下方式调用
//char *p="Copywrite 1999-2000 GGV Technologies";
//strupr(p);
// 这样调用会产生异常,原因是:指针p 这里定义的是常量字串,而常量字串我们知道是不可以更改的
return 0;
}
9、strstr(str1,str2)
str1: 被查找目标 string expression to search.
str2: 要查找对象 The string expression to find.
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
例如:
char str[]="1234xyz";
char *str1=strstr(str,"34");
cout<<str1;
输出为:34xyz