C++字符串

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()先读取空白符在丢弃掉,然后再开始下一步的输入


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   等等就不细说了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值