本文写C++中字符串的一些常见函数,以及字符数组的常见使用,以及二者的差别。
主要包含字符串string的一些常见函数,比如切割,转换。其中包含了与C语言混合使用的一些操作。
1. 求字符串string和字符数组的长度
主要包含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])
可以求(各种类型的)数组,自定义指针结构的元素个数。主要是求数组中的元素个数。
2. string的常见方法
(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代替。
3. 格式化字符串sscanf和sprintf
头文件stdio.h。功能类似于scanf和printf,但是从字符串*buffer中输出。此时变量为char数组。
(1)sprintf
用于格式化字符串,将变量打印到字符串中,从而获得变量(一般是数字和字符混合)的字符串形式。
char c[100];
int k=255;
sprintf(c,"%d",k);
//c="255"
一般用于:进制转换和连接多个字符串(char数组)。
(2)sscanf
将参数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是遇到空格就停止;
4. char *和string相互转换
(1)char *-->string:直接赋值
char a[10]="abdc";
string str=a;
(2)string-->char *:str.c_str()
两种方法:第一种定义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‘.
注意:string中的每个元素都是char类型!!!如果单独提取的话!!!
4. 查询变量类型
头文件:#include<typeinfo>
#include <iostream>
#include<string>
#include<typeinfo>
#include<string.h>
using namespace std;
int main()
{
string str="abcdefg";
const char *a;
char b[]="sd";
char *d;
cout<<typeid(b).name()<<endl;
cout<<typeid(b[0]).name()<<endl;
cout<<typeid(a).name()<<endl;
cout<<typeid(d).name()<<endl;
cout<<typeid(str).name()<<endl;
return 0;
}
//输出
A3_c
c
PKc
Pc
NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE