C++中的字符串分为两种,一种是C式风格的字符串,另外一种是基于C++的string类库的方法,我们首先来介绍C是风格的字符串
1、C式风格的字符串
#include <iostream>
#include <cstring>
int main()
{
using namespace std;
char dog[8]={'b','e','a','u','x','s','i','L'};
char cat[8]={'b','e','a','u','x','s','i','\0'};
cout<<dog<<endl;
cout<<cat<<endl;
return 0;
}
如上代码输出的是:
这里可以看出来C风格的字符串使用的是字符数组来处理的,
最后一位必须是\0结尾,只有遇到\0才表示终止,否则会如图所示出现乱码
上诉可能很复杂,很多单引号。不过我们可以这样定义
#include <iostream>
#include <cstring>
int main()
{
using namespace std;
char dog[8]="beauxsi";
char cat[]="Hello C++";
cout<<dog<<endl;
cout<<cat<<endl;
return 0;
}
到目前为止,C-style string 的字符串定义初始化已经弄清楚了,我们接下来看看怎么使用,如下代码
#include <iostream>
#include <cstring>
int main()
{
using namespace std;
const int SIZE=15;
char name1[SIZE],name2[SIZE]="C++owboy";
cout<<"name2 string lenght is "<<strlen(name2)<<" and name2 string sizeof is "<<sizeof(name2)<<endl;
cout<<"please enter name1:"<<endl;
cin>>name1;
cout<<name1<<endl;
return 0;
}
首先定义了两个字符数组,一个有值一个没值。数组长度都是15
然后,我们输出了name2的可见长度,其实可以理解为name2字符串的长度,得出是8 。
而后,sizeof,这个是取得字节长度,字符的字节是1,长度15 得出了是 15
这里,注意的是strlen和sizeof的区别
而后,我们在命令行输入字符串复制给name1
这里我们测试,输入很长超过15个字符,就会报错
输入在15之内正常
如果输入如下 das fdsfds 中间有空格,则只显示das 遇到空白字符终止,前面提到过的
这里为了预防数组越界或者遇到空白字符就结束的情况,我们可以采用直接读取整行的方式,
cin.getline()
#include <iostream>
#include <cstring>
int main()
{
using namespace std;
const int SIZE=15;
char name1[SIZE],name2[SIZE]="C++owboy";
cout<<"name2 string lenght is "<<strlen(name2)<<" and name2 string sizeof is "<<sizeof(name2)<<endl;
cout<<"please enter name1:"<<endl;
//cin>>name1;
cin.getline(name1,15);
cout<<name1<<endl;
return 0;
}
这样就可以了
介绍了如何读取正行,getline
我们来介绍另外一种方法,cin.get()
#include <iostream>
#include <cstring>
int main()
{
using namespace std;
const int SIZE=15;
char name1[SIZE],name2[SIZE]="C++owboy";
cout<<"name2 string lenght is "<<strlen(name2)<<" and name2 string sizeof is "<<sizeof(name2)<<endl;
cout<<"please enter name1:"<<endl;
//cin>>name1;
// cin.getline(name1,15);
cin.get(name1,15).get();
cin.get(name2,15).get();
cout<<"name1:"<<name1<<" name2:"<<name2<<endl;
return 0;
}
这里,可以测试一下,为什么get要使用两次。
因为,如果不使用后面的get(),当我们键入enter换行时,它并不自动切换
接下来在介绍一段代码
#include <iostream>
#include <cstring>
int main()
{
using namespace std;
cout<<"请输入你的年份:"<<endl;
int year;
cin>>year;
cout<<"请输入地址:"<<endl;
char address[80];
cin.getline(address,80);
cout<<"年份是:"<<year<<" 地址是:"<<address<<endl;
return 0;
}
我们根本就没有键入地址的机会,为什么呢??
#include <iostream>
#include <cstring>
int main()
{
using namespace std;
cout<<"请输入你的年份:"<<endl;
int year;
cin>>year;
cout<<"请输入地址:"<<endl;
cin.get();
char address[80];
cin.getline(address,80);
cout<<"年份是:"<<year<<" 地址是:"<<address<<endl;
return 0;
}
这样就好了,OK,我们来解释解释,
第一次输入年份,然后按回车,此时year遇到空白回车就终止,因此读到1994赋值给year,这个没有问题。
然后,回车了之后,cin是保留了空白字符在cin流中的,所以,第二次读地址的时候,address遇到了第一次的空白符,认为是一个空行,所以直接终止了
解决办法就是通过,cin.get()先读取空白符在丢弃掉,然后再开始下一步的输入
还有很多其他的方法,substr,append,find 等等就不细说了
2.C++风格的字符串
C++风格的字符串和其他高级语言一样,是string类
需要引入#include <string>
#include <iostream>
#include <string>
int main()
{
using namespace std;
string str1="Hello",str2="Word",str3;
//字符串的拼接
str3=str1+" "+str2;
cout<<str3<<endl;
//字符串的读入
cout<<"请输入str1:"<<endl;
cin>>str1;
cout<<"请输入str2:"<<endl;
cin>>str2;
str3=" "+str1+" "+str2+" ";
cout<<str3<<endl;
//获得字符串的长度
cout<<"str3的长度是:"<<str3.length()<<endl;
return 0;
}
还有很多其他的方法,substr,append,find 等等就不细说了