C字符串与C++中string的区别详解strcmp可以比较单个字符吗
在C++中则把字符串封装成了⼀种数据类型string,可以直接声明变量并进⾏赋值等字符串操作。以下是C字符串和C++中string 的区别:
string对象(C++)
所需的头⽂件名称
<string>或<string.h>
<string>或<string.h>
需要头⽂件原因
为了使⽤字符串函数
为了使⽤string类
声明⽅式
char name[20];
string name;
初始化⽅式
char name[20]="nihao";
string name = "nihao";
必须声明字符串长度么?
使⽤⼀个null字符么?
字符串赋值的实现⽅式
strcpy(name,"John");
name = "John";
优点
更快
更易于使⽤,优选⽅案
可以赋⼀个⽐现有字符更长的字符串么?
不能
可以
char s1[]="I am a student";
char s2[20]="teacher";
char s3[]="student";
int result;
char s4[20],*p;
(1)串长度 int strlen(char *str)
cout<<strlen(s1)<<endl; 输出14
cout<<strlen(s2)<<endl; 输出7
(2)串拷贝 char *strcpy(char *str1,char *str2)
strcpy(s4,s2);  //s4为"teacher"
(3)串连接 char *strcat(char *str1,char*str2)
strcat(s2,s3); //s2为"teacherstudent"
(4)串⽐较 int strcmp(char *str1,char *str) //⽐较的是对应字符的ASCII码值,如果str1>str2,返回1
result=strcmp(s2,s3);  //result>0
result=strcmp(s2,s2);  //result=0
result=strcmp(s3,s2);  //result<0
(5)串定位 char *strchr(char *str,char ch)
p=strchr(s1,'s');    //到返回字符在字串中的位置,否则返回-1
strcpy(p,s2);      //s1为"I am a teacher"
(6)在⼀个串中查是否存在和另⼀个串相等的⼦串
(7)截取⼦串形成⼀个新串
使⽤输⼊操符来填充⼀个C字符串变量
例如:
char a[80];
cin>>a;
注:以这种⽅式来读取C字符串时,会忽略最初的空⽩字符(空格、制表符和换⾏符),⽽且输⼊会在下⼀个空格或者换⾏符处停⽌。
使⽤预定义函数getline获取整⾏输⼊(包括空格)
getline函数有两个参数:第⼀个参数⽤于接收输⼊的C字符串变量;第⼆个参数⽤于规定getline最多能接收的字符个数。
例如:
char a[80];
当遇到⾏结束的时候,输⼊才会停⽌。
(1)⽅法⼀:和C字符串输⼊的⽅法⼀相同。
(2)⽅法⼆:使⽤getline函数。
string a;
getline(cin,a);
string对象和C字符串之间的转换
可以将C字符串存储在string类型的变量中,例如:
char a[] = "nihao";
string b;
b=a;
但string对象不能⾃动的转换为C字符串,需要进⾏显式的类型转换,需要⽤到string类的成员函数c_str().
strcpy(a,b.c_str());
atoi函数获取⼀个C字符串参数,返回对应的int值。如果参数不与⼀个int值对应,atoi就会返回0。atoi函数在⽂件为cstdlib的库中。如果数字太⼤,不能转换成int类型的值,可以使⽤atol将字符串转换为long类型的值。
atoi("1234");  //返回整数1234
atoi("#123");  //返回0

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。