本文写C++中字符串的一些常见函数,以及字符数组的常见使用,以及二者的差别。
主要包含字符串string的一些常见函数,比如切割,转换。其中包含了与C语言混合使用的一些操作。
主要包含str.length(),str.size(),strlen(s),sizeof(s)/sizeof(s[0])
(1)length和size
C++中求字符串变量string中的字符个数时,使用str.length()和str.size()。
同时,size()函数还可用来求栈和队列中的元素个数。
(2)strlen(s)
C语言中求字符数组中的元素个数,可以使用strlen(s)。但是求数字数组不能用,只能用sizeof(s)/sizeof(s[0])。
(3)sizeof(s)/sizeof(s[0])
可以求(各种类型的)数组,自定义指针结构的元素个数。主要是求数组中的元素个数。
(1)查找字符串字串str.find(s)
查找子串s在str中第一次出现的下标位置,找不到返回-1。
string str="abcdefg"; string s="cd"; cout<<str.find(s)<<endl; 输出: 2
(2)切割字串str.substr(pos, n)
返回字符串中从下标pos开始的长度为n的字串。如果参数只有一个,那么从pos开始到结尾的字串。
(3)插入字串str.insert(pos, n1, str1, pos1, n2 )
在字符串str中,从pos位置开始插入,str1从pos1位置开始长度为n2的字串,插入n1遍。其中,n1和pos1可以没有,表示插入从str1前n2个元素。
同时注意,使用迭代器时,是插入到该位置的前面:
//s.insert(s.it,ch)在s的it指向位置前面插入一个字符ch,返回新插入的位置的迭代器 it = str.insert(str.begin()+5,','); //s.insert(s.it,n,ch)//在s的it所指向位置的前面插入n个ch str.insert (str.end(),3,'.');
(4)扩展字符串str.append(str1, pos, n)
往str后面追加str1串从pos开始的长度为n的字符串。pos和n可以省略,意思为直接将str1缀到str后面。也可以通过+=实现。
(5)替代字符串str.replace(pos, n, str1)
将str中从pos开始的n个字符用str1代替。
头文件stdio.h。功能类似于scanf和printf,但是从字符串*buffer中输出。此时变量为char数组。
用于格式化字符串,将变量打印到字符串中,从而获得变量(一般是数字和字符混合)的字符串形式。
char c[100]; int k=255; sprintf(c,"%d",k); //c="255"
一般用于:进制转换和连接多个字符串(char数组)。
将参数str的字符数组根据参数format字符串来转化并格式化数据。
int i; unsigned int j; char input[ ]="10 0x1b aaaaaaaa bbbbbbbb"; char s[5]; sscanf(input,"%d %x %5s",&i,&j,s);
常见用法有:提取指定长度字符串(%5s),提取指定字符集。
注意点:
(1)%s是遇到空格就停止;
char a[10]="abdc"; string str=a;
两种方法:第一种定义const char *ch,可以直接将str.c_str()赋值给char型指针ch;第二种定义普通char *ch,通过函数strcpy(ch, str.c_str())赋值。
string str="abcdefg"; const char *a,*c; char b[20]; a=str.c_str(); c=str.data(); strcpy(b,str.c_str());
注意还有str.data(),这个返回的字符数组不带'\0',str.c_str()带有’\0‘.