1. C 作风字符串
C 作风的字符串起源于 C 言语 并在 C++中继承获得支撑。字符串被存储在一个字符数组中 平常经由过程一个 char*范例的指针来支配它 。
规范 C 库为支配 C 作风的字符串供应了一组函数,比方:
int strlen( const char* ); // 返回字符串的长度
int strcmp( const char*, const char* ); // 比较两个字符串是不是相称
char* strcpy(char*, const char* ); // 把第二个字符串拷贝到第一个字符串中
规范 C 库作为规范的 C++的一部分被包括在个中。为运用这些函数,我们必需包括相干的 C 头文件#include <cstring>
1.1 不挪用库函数,完成C作风字符串的经常使用基本函数
#include<iostream> #include<cstring> #include<cassert> using namespace std; /*返回字符串长度*/ int MyStrlen(const char * ch) { assert(ch!=NULL); int i=0,count=0; const char *t=ch; //用一个暂时指针去遍历,防备转变本来指针指向。 while(t[i]!='\0') { count++; i++; } return count; } /*把第二个字符串拷贝到第一个字符串中,返回第一个字符串的首部指针。*/ char* MyStrcpy(char *des,const char *src) { assert((des!=NULL)&&(src!=NULL)); int i=0; char *add=des; //用add纪录des的首部。 while(src[i]!='\0') { des[i]=src[i]; i++; } des[i]='\0'; return add; } /* 比较两个字符串是不是相称。 相称则返回0,前一个字符串比后一个小则返回-1,不然返回1。 */ int MyStrcmp(const char *ch1,const char *ch2) { assert((ch1!=NULL)&&(ch2!=NULL)); int i=0; const char *str1=ch1; //定义两个暂时指针。 const char *str2=ch2; while((str1[i]!='\0')||(str2[i]!='\0')) { if(str1[i]<str2[i]) { return -1; } else if(str1[i]>str2[i]) { return 1; } else { i++; } } return 0; } int main() { char ch[]="cavely"; char ch2[]="julia"; cout<<MyStrlen(ch)<<endl; //6 cout<<MyStrcmp(ch,ch2)<<endl; //-1 /* 下面这两句不能写成: char ch3[100]; ch3=MyStrcpy(ch,ch2); //数组名是一个地点【常量】。不能被赋值 */ char *ch3; ch3=MyStrcpy(ch,ch2); cout<<ch3<<endl; //julia return 0; }
2.string 类范例
要运用 string 范例 必需先包括相干的头文件#include <string>
string str("hello"); //①定义一个带初值的字符串
string str2; // ②定义空字符串
string str3( str ); //③用一个 string 对象来初始化另一个 string 对象
2.1 对字符串类的基本操纵:
(1)str的长度由 size()操纵返回(不包括停止空字符),比方str.size()的值为5。
(2)运用 empty()操纵推断字符串是不是为空,比方:str2.empty()。假如字符串中不含有字符,则 empty()返回布尔常量 true ,不然返回 false。
(3)还可以直接运用赋值操纵符 = 拷贝字符串,比方:st2 = st3; // 把 st3 拷贝到 st2 中
(4)可以运用加操纵符 + 或看起来有点奇异的复合赋值操纵符 += 将两个或多个字符串连接起来。比方,给出两个字符串
string s1( "hello, " );
string s2( "world\n" );
我们可以按以下体式格局将两个字符串连接起来构成第三个字符串
string s3 = s1 + s2;
假如愿望直接将 s2 附加在 s1 背面 那末可运用 += 操纵符
s1 += s2;
(5)string 范例支撑经由过程下标操纵符接见单个字符,比方,鄙人面的代码段中,字符串中的一切句号被下划线替换。
string str( "fa.disney.com" ); int size = str.size(); for ( int ix = 0; ix < size; ++ix ) if ( str[ ix ] == '.' ) str[ ix ] = '_';
上面代码段的完成可用以下语句替换:
replace( str.begin(), str.end(), '.', '_' );
replace()是泛型算法中的一个,begin()和 end()操纵返回指向 string 最先和完毕处的迭代器(iterator) 。迭代器是指针的类笼统 ,由规范库供应。replace()扫描 begin()和 end()之间的字符。每一个即是句号的字符,都被替换成下划线。
2.2 C 作风的字符串与 string 对象的转换
string 范例可以自动将 C 作风的字符串转换成 string 对象。比方,这使我们可以将一个 C 作风的字符串赋给一个 string 对象。
string s1;
const char *pc = "a character array";
s1 = pc; //OK
然则,反向的转换不能自动实行。对隐式地将 string 对象转换成 C 作风的字符串 string范例没有供应支撑。比方下面,试图用 s1 初始化 str 就会在编译时候失利。
char *str = s1; // 编译时候范例毛病
为完成这类转换,必需显式地挪用名为 c_str()的操纵。名字 c_str()代表了 string 范例与 C 作风字符串两种示意法之间的关联。字面意义是,给我一个 C 作风的字符串示意——即 指向字符数组肇端处的字符指针。为了防备字符数组被顺序直接处置惩罚, c_str()返回了一个指向常量数组的指针 const char*
所以,准确的初始化应该是:const char *str = s1.c_str(); // OK
相干引荐:
从C/C++迁移到PHP推断字符范例的函数
从C/C++迁移到PHP——推断字符范例的函数_php基本
视频:C++ 手册教程-在线手册教程
C++ 教程 | C++ 手册教程
以上就是c/c++字符串函数是什么范例和它是怎样转换的?举例说明的细致内容,更多请关注ki4网别的相干文章!