C++ 字符数组和String类

C++ 字符数组和String类

开发工具与关键技术:C++、VisualStudio
作者:何任贤
撰写时间:2019年04月10日
C++中的字符数组和C#的字符串类型都是用来存储字符串的,字符数组和string类有什么关系呢?第一它们有一个共同的,它们都可以存储字符串,第二就是它们的区别,string在C#是代表字符串类型,都是在C++中则是一个类,一个封装类,C++原本是没有String的,为什么C++后来加入String类呢? 

我个人认为是因为字符数组在操作字符串上不够灵活所以后来加入String类,来优化C++对字符串的处理,之所以我这么认为是因为,我是先学C#再学C++,所以在C#使用string类型操作字符串确实是比C++中字符数组操作字符串要方便,举一个简单的例子,比如我在C#可以直接对string类型进行赋值而C++的字符数组不可以,但是C++的string类可以,我发现C#的string类型可以做到的,C++的string类也基本可以。
那么我们回归正题,字符数组和string类,首先我们知道它们都可以操作字符串的,下面是一个简单的例子,用于证明它们都可以操作字符串。

#include
#include
using namespace std;
void main()
{
char a[10];
string b;
cin >> a >> b;
cout << “字符数组:” << a << “\n” << “string类:” << b << “\n”;
}
在这里插入图片描述

那么它们既然都可以操作字符串,那么它们又有什么不同之处呢?第一个不同之处是字符数组是一个数组,而string类是一个类,一个封装类。那么它们还有什么不同呢?自然是在类型转换,因为我们把同一个字或符号,赋予不同的类型就有不同的属性,同样也代表它们进行不同操作,例如说阿拉伯数字的0和1,它们就可以有多种类型,比如整型、布尔型、字符型也可以是字符串类型等等。
那么我把0和1来进行类型转换,我们看看用字符数组的0和1,和string类的0和1在转换中有什么不同,那么我们先用字符数组的,下面就是字符数组的转换和输出。

#include
#include
void main()
{
char a[] = {1};
int b;
bool c;
char d;
b = a[0];
c = a[0];
d = a[0];
cout << “整型:” << b << " " << “布尔型:” << c
<< " " << “字符型:” << d << “\n”;
}

在这里插入图片描述
通过输出我们知道字符数组可以通过下标把值直接赋给整型、布尔型,而不能直接赋给字符型,虽然编译器没有报错,也可以输出,但是输出的结果不是我们想要的,至于字符数组要怎么通过下标把值赋给字符型这里就不说了。
那么我们通过上面的可以知道字符数组在转换类型和赋值上不如C#的string类型,而且它还有一个缺点就是它的长度从声明开始就固定了,那么一旦超过它的长度系统就会直接报错,当然这也是一个优点,就是我们可以根据自己需求来决定使用多大空间。
那么string类是不是和C#string类型一样呢?既然是一个类那么和字符数组的转换类型有什么不同,下面是string类的类型转换和输出。

#include
#include
using namespace std;
void main()
{
string a = “1”;
int b;
bool c;
char d;
b = atoi(data(a));
c = data(a);
d = atoi(data(a));
cout << “整型:” << b << " " << “布尔型:” << c
<< " " << “字符型:” << d << “\n”;
}

在这里插入图片描述
虽然得出来的结果和上面的一样,但是转换不一样,我们可以看到的是我在把string类转换成int类型时用了两个函数一个是atoi()一个是data(),atoi()函数是把charl类型转换成int类型,而data()函数则是把string类转换成char类型,之所以用这两个是因为没有找到直接把string类转换成int类型的转换函数,而atoi()函数则是因为赋值符不能把通过data()函数转换的字符,赋给int类型。
至于布尔型则不需要,而字符型即使通过这两个函数转换,但是输出的结果也不是我们想要的。
这就是字符数组和string类转换成其他类型的不同之处。虽然转换方式不是我们选择使用string类和字符数组的重要因素,但也是其中之一。
我们说过字符数组和string类转换其他类型,那么我们现在在看看int类型转换成字符数组和string类,我们看看就行。

#include
#include
using namespace std;
void main()
{
string a;
int b = 1;
a = to_string(b);
cout<< “string类:” << a << “\n”;
}
在这里插入图片描述
这是int类型转string类的,虽然不用to_string()函数也不会报错,但是却不会得到我们想要的结果。
void main()
{
char a[3];
int b = 1;
a[0] = b;
cout<< “string类:” << a[0] << “\n”;
}
在这里插入图片描述
这是int类型转字符数组的,显然输出并不是我们想要的,但是字符数组无法使用to_string()函数转换类型。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值