C++字符串处理

    技术2022-05-19  20

    1. string是类,不是数据类型。所有的string类都是以C-style字符串为基础的,C-style字符串是字符数组。

    字符编码类型有:单字节字符集-SBCS;多字节字符集-MBCS,包括两种字符类型-单字节字符(SBCS)和双字节字符(DBCS);Unicode,所有字符都使用两个字节编码。

    SBCS、DBCS编码的字符串都是用一个字节表示的0作为结束标志;Unicode用两个字节表示的0作为结束标志。

    2. 通常使用的数据类型char,为单字节字符集。奇怪的是双字节字符集也用char数据类型。Unicode字符串使用wchar_t数据类型。

    3. 对char进行处理的函数有:

    /* *strchr:在非空字符串string中查找字符c,返回的是指向string中第一个c的指针。 strstr:在非空字符串string中查找非空字符串strCharset,返回被查找串的指针 */ char *strchr( const char *string, int c ); char *strstr( const char *string, const char *strCharSet ); int c='r'; char string[]="the quick brown"; char *pdest=strchr(string,c); cout<<*pdest<<,<<pdest-string+1<<endl; /**结果为:r,12*/ /* strcat:将strSource附加到strDestination末尾 strcpy:将strSource复制到strDestination。 */ char *strcat( char *strDestination, const char *strSource ); char *strcpy( char *strDestination, const char *strSource ); char string[80]; strcpy( string, "Hello world from " ); strcat( string, "strcpy " ); strcat( string, "and " ); strcat( string, "strcat!" ); printf( "String = %s/n", string ); /*结果为Hello world from strcpy and strcat!*/ /* 两个非空字符串比较,返回值<0-string1 less than string2, 小写字母大于大写字母。 _stricmp( string1, string2 )-忽略字母大小写 */ int strcmp( const char *string1, const char *string2 ); /*得到非空字符串string的长度*/ size_t strlen( const char *string ); char buffer[61] = "How long am I?"; size_t len; len = strlen( buffer ); printf( "'%s' is %d characters long/n", buffer, len ); /*结果为14*/

    以上介绍了,对字符串(char类型数组)的处理函数。查找:strchar,strstr。复制:strcpy。比较:strcmp。追加:strcat。长度:strlen。

    这些函数都在string.h中申明,需要引用该头文件才能使用。

    4. 字符串(char数组)转换为数据

    /* 将字符串转换为double(atof),integer(atoi,_atoi64),长整型(atol)。如果输入不能被转换,返回0;数据溢出,返回未定义。 */ double atof( const char *string ); int atoi( const char *string ); _int64 _atoi64( const char *string ); long atol( const char *string );  

    这些函数被定义在stdlib.h中。

    5. 数据转换为字符串(字符数组)

    /*将integer转换为字符串. value为数字,str为转换后的结果,radix为基数,返回指向str的指针 */ char *_itoa(int value,char *str,int radix); char *_i64toa(_int64 value, char *str, int radix); /*将长整型转为字符串*/ char *_ltoa( long value, char *str, int radix ); /*将double转为字符串. value-被转换的数字,count-要存储的位数,dec-转后所得字符串中10进制的小数点所在位置,sign-0表示数字为正,其他为负。 返回值为指向所得字符串的指针 */ char *_ecvt( double value, int count, int *dec, int *sign ); int decimal, sign; char *buffer; int precision = 10; double source = 3.1415926535; buffer = _ecvt( source, precision, &decimal, &sign ); printf( "source: %2.10f buffer: '%s' decimal: %d sign: %d/n", source, buffer, decimal, sign ); /**结果为:source: 3.1415926535 buffer: '3141592654' decimal: 1 sign: 0*/  

    这些函数也定义在stdlib.h中。


    最新回复(0)