C++学习笔记三:string(字符串)

前言

本学习笔记根据学习进程中遇到的问题更新,因此并不是按大类进展。由于string类也是类模板,虽然不是容器,但与容器相似,因此只介绍string类和容器间的区别。

用法

1. 声明和初始化

区别:容器中的指向均是半开半闭区间,例如vetcor.beign(),vector.begin()+3 意味着vector[0]~vector[2](闭区间)
而string中均为闭区间。
	//vector construction
	string s1(4,'c'); // 'c' is repeated  four times
	string s2("hello world", 1, 6); //copy char[1] ~ char[5] , that is "ello w"

	//string initialization
	string s3("hello world"),s4;
	s4.assign(s3, 3, 6); // clear srting, s4 = "lo w",that is s3[3]~s3[7]
	s4.assign("hello world", 3, 6); // clear srting, s4 = "lo w",that is char[3]~char[7]

2. 基本操作
(1)增加或删除元素

++=可以实现char、string的拼接。
string s5("abc"), s6("zyx");

s5.append(s6); //s5 = "abczyx"
s5.append(s6,1,2); //s6 = "abcyx"

s5.insert(2,3,'A'); // str[2] (包括[2])后插入3个'A'
s5.insert(2,"abc"); // str[2] (包括[2])后插入"abc"

s5.erase(2); //删除str[2] (包括[2])后全部元素
s5.erase(1,2); //删除str[1] (包括[1])后2个元素
s5.replace(1,2,"abc") //从str[1]开始替换2个字符(删除str[1]开始的2个字符),替换为"abc"
/*
include <algorithm> 中提供了
replace(str.begin(),str.end(),'a', 'b') // 从str.begin()~str.end()将'a'替换为'b',仅能单字符操作
*/

(2)算法

#include <algorithm> 
s5.find_first_of("bca"); //查找s5和"bca"任意一个相同字符,有就返回第一个相同的位置

(3)比较

==、!=<>>=<=可以实现字符串比较
s5.compare("abc"); //完全相同返回0,完全不同返回<0,部分相同返回>0
s5.compare(1, 5, "abcds",2,4); // s5[1]开始5个字符和"abcds"[2]开始4个字符比较
s5.compare(1, 5, "abcds",4); // s5[1]开始5个字符和"abcds"[0]开始4个字符比较
/*
include <algorithm> 中提供了
replace(str.begin(),str.end(),'a', 'b') // 从str.begin()~str.end()将'a'替换为'b',仅能单字符操作
*/

(4)拷贝

string str;
str.c_str(); // 返回const char*, 以'\0'结尾
str.data(); //  返回const char*,不以'\0'结尾
str.copy(p,n,pos=0); // 从string中赋值n个字符到p指针指向的空间中(p可以是char*),从pos开始

3. char*、char[]、string区别和转换
char* p = “hello”,p是一个字符指针,存储在内存stack上;"hello"是字符串常量,存储在文字常量区,不可更改;
char[]是一个字符数组,存储在st上;
string是string类对象。
(1) char*和char[]转string:
可以直接赋值。

string s;
char* p = "hello";
char str[] = "world";
s = p; //直接赋值
s = str; //赋值方式1
string s1(str); //赋值方式2

(2) string 转char[]
不能直接赋值,需要循环或strcpy_s函数;

	string s = "hello"; 
	char str2[8];
	
	/*方法1*/
	for (int i = 0; i < s.length(); i++)
	{
		str2[i] = s[i];
	}

	strcpy_s(str2, s.c_str()); // 方法2

(3) string转char*
string 转const char* ,采用2个函数,第一个.c_str()函数,第二个.data()成员函数。
如果需要使用char* 需要开辟动态空间。

string s = "hello world";
const char *p1 = s.c_str(); //方法1
const char *p2 = s.data(); //方法2

char * p3;
int len = s.length();
p3 = new char;
p3 = (char *)malloc((len+1)*sizeof(char));
s1.copy(p3,len,0); // 方法3


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值