C++学习笔记(十七):c++字符串

  • 本文对c++中字符串进行接单介绍。
  • c++中字符串实际就是字符数组,字符数组是指一组字符的集合,所以一组字符串组成了字符串或文本。
  • c语言风格的字符串用const char *表示。在c++中有一个专门的字符串string库,使得对字符串的操作变得更加简单。下面简单介绍字符串的工作原理:
#include

int main()
{
	const char* name = "pcop";  //定义一个字符串name

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

	std::cin.get();
	return 0;
}
  • 上诉代码中name字符串添加const关键字是因为字符串是不可变的,不能扩展字符串使字符串变大。如果需要将name字符串变大,需要重新分配内存。
  • 字符串在内存中表现为一串连续的地址,以'\0'终止。
  • C++学习笔记(十七):c++字符串_第1张图片
  • string库简介
#include
#include

int main()
{
	std::string name = "pcop";  //定义一个字符串name

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

	std::cin.get();
	return 0;
}
  • #include
    #include
    void PrintString(std::string string)//当把一个类对象传递给一个函数时,实际上传递的是类对象的复制
    {
    	string += " china";
    }
    
    int main()
    {
    	//std::string name = "pcop" + "tj";  //string不支持直接+操作,应为"pcop"和"tj"都是const char *类型,不是string类型
    	std::string name = "pcop";
    	name += "tj"; //可以使用+=操作,因为name是string类型的指针,=+操作符在string类中被重载
    	name.find("co"); //查找指定字符串在原始字串中的位置
    	std::string::npos;  //未找到则会返回此
    	bool contains = name.find("co") != std::string::npos;//表示在原始字符串中找到了"co"字符串
    
    	PrintString(name);
    	std::cout << name << std::endl;
    
    	std::cin.get();
    	return 0;
    }
  • 上述代码的运行可以看到直接将类对象传递给函数,实际上传递的是类对象的引用,在函数内的操作,并不会影响原始的类对象的值。
  • C++学习笔记(十七):c++字符串_第2张图片
  • 所以在将字符串传递给函数时,需要传递字符串常量引用。
  • C++学习笔记(十七):c++字符串_第3张图片
  • 当对函数传递字符串常量引用后不能在对字符串的内容进行修改,如上图所示。实际上在对字符串进行+=操作的时候,会进行字符串赋值操作,会将原来的字符串复制到一个新的内存空间,再把后面添加的内容写到后面,字符串的复制操作会影响性能。
  • 字符串的字面量是指双引号之间的一串字符。
  • C++学习笔记(十七):c++字符串_第4张图片
  • C++学习笔记(十七):c++字符串_第5张图片
  • 上图中介绍c++14中提供的字符串操作的函数,s实际上是一个函数,返回的时标准的string对象。类似的操作还有R等。
  • #include
    #include
    
    int main()
    {
    	//字符串字面量
    	using namespace std::string_literals; //在c++14中提供了一些方便操作字符串的函数
    
    	//字符串字面量永远保存在内存的只读区域
    
    	//忽略转义字符,换行打印字符串
    	const char* name = R"(pcop  
    Line2
    Line3)";
    	const char* name2 = "pcop\n"
    		"line2\n"
    		"Line3\n";
    
    	std::cout << name << std::endl;
    	std::cout << name2 << std::endl;
    	std::cin.get();
    	return 0;
    }

你可能感兴趣的:(c++,学习,笔记)