String

#include <iostream>
#include<string>

//第一个传入的string不会在内存中被复制,直接打印。 第二个会复制
void PrintString(const std::string& mystring, std::string mystring2) {
	mystring2 += '!!!';
	std::cout << mystring << std::endl;
	std::cout << mystring2 << std::endl;
}

int main()
{
	const char* name = "Veyron";//不加const关键字声明的话,会产生编译错误
	//0,在ASCII码中代表的就是char的结尾:或者'\0' 转义为0
	char name2[7] = { 'V' , 'e' , 'y' , 'r' , 'o' , 'n' , 0 };//char的本质就是Array

	//string没有办法直接“string_Veyron”+“Hello”相加
	std::string string_name = std::string("string_Veyron") + "Hello";

	std::cout << name << std::endl;

	PrintString(string_name, string_name);

	std::cin.get();
}
  • 运行结果:
  • Veyron
    string_VeyronHello
    string_VeyronHello!

     

  • char的本质就是array中的一系列ASCII码表+结尾的0(或者说'\0')
  • a string of text,是std模板的一部分
  • string本质就是char 的Array,加上一堆对它的操作函数
    以后学习数据结构,会写自己的data structures,并学习如何优化它
  • std::string本质就是const char*
  • string有很多的骚操作,细节比较多
  • string的有效内存只存在only-read内存中
#include <iostream>
#include<string>
#include<stdlib.h>//标准函数库的头文件

int main()
{
	const char* name = u8"Veyron";//utf8
	const wchar_t* name2 = L"Veyron";//wchar_t所能表示的字符数远超char型
	const char16_t* name3 = u"Veyron";//utf16: 2个bytes,16个bits
	const char32_t* name4 = U"Veyron";//utf32: 4个bytes,32个bits

	//string没有办法直接“string_Veyron”+“Hello”相加
	std::string string_name = std::string("string_Veyron") + "Hello";
	//但是
	//C14特性中可以这么写:
	//std::u32string string_name = U"string_Veyron"s + U"Hello";

	//分行打印
	const char* example = R"(Line1
Line2
line3
Lin4
)";
	
	std::cout << name << std::endl;
	std::cout << example << std::endl;
	std::cout << strlen(name) << std::endl;

	std::cin.get();
}

运行结果:

Veyron
Line1
Line2
line3
Lin4

6

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值