c语言里面的字符串数组,以'\0'结束来保证字符串长度,而cpp里面的string类本身保证其长度,不以'\0'结尾,会导致一些操作和运算上的区别
1.字符串声明和初始化
①声明:字符串数组和cpp里面的string类
字符串数组声明方法:
char str1[size]; //size是预设字符串大小,大于或等于待存储字符串长度
string类声明方法:
#include<string>
using std::string;//必须包括的头文件和命名空间
int main()
{
string str2; //声明了一个str2字符串
}
②初始化:
//基本的c风格初始化
char str1[10] = "smart";
string str2 = "smart";
//初值列表初始化
char str3[10] {"smart"};
char str4[10] = {"smart"};
string str5 {"smart"};
string str6 = {"smart"};
2.字符串的读入
主要有cin、cin.getline()、cin.get()、getline();
①cin主要用于读入一个单词(word),无法跨越空白符
/******代码片段*****************/
string str1;
cin>>str1;
cout<<str1<<endl;//只会输出Jhon,且Black留在了输入队列
/******运行结果*********
Jhon Black
Jhon
***********************/
②cin.getline()和cin.get()
可以跨越空白符,且主要用于字符串数组的读入;
/******代码片段***********/
char str1[size];
cin.getline(str1,size);//读入一个小于等于size长度的字符串,可以跨越空白
//第二个参数不一定是size,可以小于size,但是要大于带输入字符串长度
cout<<str1;
/********运行结果***********
Jhon Black
Jhon Black
***************************/
/*********备注**********************
cin.get()和cin.getline()用法基本一致,
但是cin.get()会把结尾换行符留在输入队列
影响下一次输入
**************************************/
③getline()
cpp里面的string类包含的读入,需要using std::string才能使用;
/**************代码片段**************/
string str;
getline(cin,str);
cout<<str;
/************运行结果******************
Jhon Black
Jhon Black
**************************************/
/***********备注**********************
cin.getline()不适合读入string声明的字符串
因为长度未知,第二个参数无法确定,而且不能
按照输入字符串长度私自填入
**************************************/
3.字符串的赋值和运算
cpp的string声明的字符串允许将一个字符串赋给另一个字符串,允许字符串之间相加(+、+=、=);
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1 {"smart"};
string str2 = str1;//将str1赋值给str2
string str3 = str1 + str2;//将str1和str2拼接起来
cout<<str3;
}
/**********运行结果*********************
smartsmart
***************************************/
4.一些字符串常用函数
①strcpy()复制字符串【这是一个c函数,针对字符串数组使用,不能对string类使用使用时候要包含头文件<cstring>】
strcpy(str1,str2); //等效于cpp中的string里面的操作str1 = str2;将2的值给1
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str1[10] {"smatr"};
char str2[10] {"phone"};
strcpy(str1,str2);//将str2给str1
cout<<"str1 = "<<str1;
}
/**************运行结果***************
str1 = phone
************************************/
②strcat() 拼接字符串【这是一个c函数,针对字符串数组使用,不能对string类使用使用时候要包含头文件<cstring>】
strcat(str1,str2);//等效于 cpp里面string的操作str1 = str1 + str2;
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str1[10] {"smatr"};
char str2[10] {"phone"};
strcat(str1,str2);//将str1和str2拼接起来
cout<<str1;
}
/*********运行结果***************
smartphone
*******************************/
③strlen()【这是一个c函数,针对字符串数组使用,不能对string类使用使用时候要包含头文件<cstring>】
len = strlen(str1);//计算字符串str1实际长度,不包含'\0',等效于cpp的len = str1.size();
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int len1,len2;
char str1[10] {"smatr"};
string str2 {"phone"};
len1 = strlen(str1);
len2 = str2.size();
cout<<"len1 = "<<len1<<endl<<"len2 = "<<len2<<endl;
}
/*************运行结果**************************
len1 = 5
len2 = 5
************************************************/