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()函数转换类型。

C++ 字符数组和String类相关推荐

  1. java stringbuffer数组_Java中字符数组、String类、StringBuffer三者之间相互转换

    一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringB ...

  2. java的常用引用类、数组、String类

    java的常用引用类.数组.String类 1. 常用引用类 1.1 Scanner 一个简单的文本扫描器类. 使用: //创建扫描器对象 Scanner sc = new Scanner(Syste ...

  3. java进阶第二讲-数组、String类

    java进阶第二讲-数组.String类 1 回顾一下Object Object中的方法:public native int hashCode();带有native关键字的方法调用的是底层C++的dl ...

  4. 小白学C++ L11 数组和字符数组及string 类型

    数组 C++使用数组来实现一次性声明很多变量的功能,具有以下特性: 创建后的数组大小固定 同一数组中的元素类型相同 是一系列数据顺序集合 数组如何声明 在C++中声明数组时,需要指定元素类型.数组名称 ...

  5. c#string倒数第二位插入字符_c#string倒数第二位插入字符_C#利用String类的IndexOf、LastIndexOf、...

    一.String.IndexOf String.IndexOf 方法 (Char, Int32, Int32) 报告指定字符在此实例中的第一个匹配项的索引(从0开始).搜索从指定字符位置开始,并检查指 ...

  6. java char数组转string数组_Java中char数组(字符数组)与字符串String类型的转换方法...

    本文实例讲述了Java中char数组(字符数组)与字符串String类型的转换方法.分享给大家供大家参考,具体如下: 在Java语言编程时,使用"口令字段"jPasswordFie ...

  7. 【Java5】String类,StringBuilder类,ArrayList类,Object类(toString,equals,hashCode)

    文章目录 1.String类:字符串常量在Java中不属于基本数据类型, 而是引用/类类型 1.1 使用:new String(...) 1.2 判断:equals函数是用来比较两个对象是否相等 1. ...

  8. 11.28 String类

    两种实例化方式 public class Demo{public static void main(String[] args){String stra = "hello world&quo ...

  9. 【JavaSE】String类总结,StringBuilder、StringBuffer、String的区别讲解

    文章目录 String对象的构造 String类的一些常用方法 求字符串的长度 字符串判空 字符串对象的比较 字符串对象的查找 字符串对象的转化 字符串对象的截取 字符串对象的替换 字符串对象的拆分 ...

最新文章

  1. Linux13-bash脚本编程基础及配置文件
  2. VS Code的7个开源替代品
  3. ORACLE 字符串函数用法(转载)
  4. SpringBoot 后台管理系统
  5. Linux下Poppler源码编译安装
  6. 双向队列(STL做法)
  7. Ubuntu18.04 可用字体库
  8. 来吧学学.Net Core之项目文件简介及配置文件与IOC的使用
  9. ElasticSearch 索引、更新和删除数据
  10. 使用WPF创建画图箭头
  11. c#使用SHA256算法实现对文件的加密和解密
  12. Android Studio:Support Library依赖包的版本号
  13. 改变win7登陆时的界面
  14. Java解析cron表达式
  15. 微商引流产品有哪些?做微商如何引流以及推广产品?
  16. Detected outdated SDK Tools version 0.0.0 when the min version is XXX
  17. Java基础篇--设计模式
  18. sql注入进阶/user-agent/基于报错的注入/保姆级教程/一看就会/
  19. 实用解析dmp文件内容
  20. 2022电工杯A题B题高质量保奖代码思路合集

热门文章

  1. 代码审计之CVE-2018-7600-Drupal远程代码执行漏洞-Render API
  2. VS网站开发的发布部署的不同情况说明
  3. [NOI2013]快餐店
  4. MySQL如何查询两个日期之间的记录
  5. 2017《面向对象程序设计》课程作业六
  6. 查看服务器硬件配置信息(cpu/内存)
  7. Python---常见问题
  8. ubuntu-桌面版-常用设置
  9. 关于SQL的几个备忘
  10. Python学习笔记:面向对象编程(2)