示例:字符串abc转换成ab6

char name[] = "abc";
name[2]=char(6+48);//48是ascii表中,char和int看起来相等的差值

C++中有五种方式可以表示字符串,记住前两种就可以
1.char类型的数组(C语言风格字符串)
2.string类(C++时代诞生的新类)
3.wchar_t宽字节型变量
4.char16_t
5.char32_t

1.可以使用下面的编码来用char数组表示字符串

 char c1[] = {'L','O','L'};char c2[] = {"LOL"};char c3[] = "英雄联盟LOL";const char* c4 = "MEIMEI";std::cout << sizeof(c1) << "\n";//3std::cout << sizeof(c2) << "\n";//4std::cout << sizeof(c3) << "\n";//12std::cout << c4 << "\n";

其中c2打印出4,是因为最后还有一个字符"\0"在隐身,我们看不见
其中c3打印出12,也是相同的原因,4个中文占8个字节,3个英文占3个字节,加一起是11,再加1个最后隐身的"\0",正好12,所以用char数组来表示字符串一定要注意长度的问题

2.string型字符串,关于string类的详细介绍请点击这里
因为string类存在于std命名空间,要想使用string类,则必须添加头文件string并且声明std,像下面这样

#include <string>
using namespace std;
int main()
{string c4 = "约德尔人";
}

或者

#include <string>
int main()
{std::string c4 = "约德尔人";
}

3.wchar_t宽字节型变量
char是1个字节,不能用来保存中文,为了解决这个问题,c++提供了宽字节变量wchar_t,使用方式如下,在不同的系统占字节不一样,不常用,如果执行utf16标准,则占用2个字节,如果执行utf32标准则占用4个字节

#include "pch.h"
#include <iostream>
#include <locale>
int main()
{//必须引用头文件locale,然后调用setlocale方法setlocale(LC_ALL,"chs");//之后才可以定义中文,注意下面是单引号wchar_t aa = L'表';//cout没有实现对wchar_t的支持,所以用cout是不行的,需要用wcoutstd::wcout << aa;
}

上述wchar_t也可以同时放入多个汉字,这个时候写法如下

// aa变成了数组,而之前的单引号也变成了双引号
wchar_t aa[] = L"表妹";

4.char16_t
由于wchar_t在不同系统环境字节数不一样,所以为了统一,出现了char16_t类型,其中16表示16个bit,也就是2字节
注意:在char16下,英文也占2字节,不要认为英文占1个

// char16_t定义的变量需要在前面加小写u
char16_t aa = u'呵';
std::wcout << aa;
std::cout << aa;

通过打印发现,无论是cout还是wout,打印的都是数字,而不是中文,因为c++中没有实现对char16_t的输出,所以该类型无法在屏幕上显示中文

5.char32_t
占四个字节,其他特性与char16_t一样
注意:在char32下,英文也占4字节,不要认为英文占1个

// char32_t定义的变量需要在前面加大写U
char16_t aa = U'呵';
std::wcout << aa;
std::cout << aa;

C++自学07:字符串(char/string/wchar_t/char16_t/char32_t)相关推荐

  1. C++学习笔记(一):中文字符的处理——批量读取和修改文件夹下文件名,以及wchar_t/wstring与char/string不得不说的故事

    欢迎访问我的个人博客:https://midoq.github.io/ 前几天在网上下载了一堆教程,但是名字是用中文数字命名的,在windows文件管理下无法按数字顺序进行排序,这让强迫症的我很不爽, ...

  2. char与wchar_t字符串

    C++里的字符串类型是比较二的,因为有太多表示方法:char*.string.字符串数组.wchar_t*.wstring,今天就来缕一缕这些玩意. char* char* 貌似是C++字符串最基础最 ...

  3. PInvoke复习之深入理解char*与wchar_t*与string以及wstring之间的相互转换

    本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下 #ifndef USE_H_ #define USE_H_ #i ...

  4. MATLAB中字符变量(char)和字符串变量(string)的异同

    文章目录 MATLAB中字符变量(char)和字符串变量(string)的异同 1.表现形式上 2.相同用法 3.差异 4.两者转换 MATLAB中字符变量(char)和字符串变量(string)的异 ...

  5. 把char*转换为wchar_t*

    把char*转换为wchar_t* 用stdlib.h中的mbstowcs_s函数,可以通过下面的例子了解其用法: char *CStr = "string to convert" ...

  6. C/C++中char *与wchar_t*的几种转换方法

    多字节(char *)和宽字符(wchar_t *)之间的转换有几种方式,下面按照从通用到特殊的顺序逐一介绍. 1.C库函数 1.1 关键函数 (1) setlocale() 功能:配置地域化信息 头 ...

  7. C++中char*与wchar_t*之间的转换

    把char*转换为wchar_t* 用stdlib.h中的mbstowcs_s函数,可以通过下面的例子了解其用法: char *CStr = "string to convert" ...

  8. char 转wchar_t 及wchar_t转char

    利用widechartomultibyte来转换的函数 通常适合于window平台上使用 #include <tchar.h> #include <windows.h> int ...

  9. char与wchar_t的转换

    来源于:http://www.cppblog.com/lf426/ wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式,wchar_t类型主要用在国际化程序的实现中,但它不等同于uni ...

最新文章

  1. linux查找日志技巧
  2. ASP.NET Eval如何进行数据绑定
  3. vue.js单页面应用实例
  4. samba安装_Centos安装Samba
  5. python xml解析库_Python xml解析库xml_models2
  6. 自考本科的单科成绩包括英语和计算机吗,自考问题自考统考科目(例如:英语,计算机等 – 手机爱问...
  7. HTTP gzip压缩
  8. HDU-1814 Peaceful Commission (2-SAT暴力模板 暴力染色+字典序最小)
  9. 小程序中设置全屏背景图
  10. 关于开发语言个人随想
  11. Activiti整合Spring (Mysql8.0版本)
  12. 服务器迁移到阿里云的解决方案
  13. 合理利用计算机虚拟内存,合理设置虚拟内存,目前8G内存足够日常使用
  14. 编译原理(哈工大)绪论
  15. HX=JE,HX-JE芯片,无感4.9V升压ic电路图PDF应用技术
  16. 植物大战僵尸java版_植物大战僵尸:M8版 JAVA版下载
  17. 0816常见错误分析
  18. 【项目管理/PMP/PMBOK第六版/新考纲】易错单选题21道带答案解析!建议收藏!
  19. fseek linux 大文件_fseek读取大文件
  20. java计算机毕业设计社区物业管理系统源码+系统+数据库+lw文档

热门文章

  1. 苹果app商品定价_苹果官网闹乌龙,千元产品变百元!多人闻风薅羊毛!
  2. STM32部分功能所在文件位置
  3. 计算机三级嵌入式系统之常考指令
  4. Python中计算文件的MD5值
  5. Java调用.net开发的webService接口
  6. 带负荷测试要求二次最小电流_差动保护带负荷测试
  7. JS使用闭包保护变量,防止污染
  8. MySQL中varchar类型字段隐式转换造成多删除数据
  9. LInux之gz文件压缩/解压缩
  10. MySql计算百分比