C++String基本知识

常见用法

1.转换c_str()
函数原型

const char* c_str() const;

c_str()函数返回一个指向C字符串的指针常量,内容是字符串对象的当前内容加上一个额外的终止字符(‘\ 0’)。这将与c语言兼容,c_str()把string 对象转换成c中的字符串样式。

通过c_str()方法,可将string转化为char类,但char前要加const才能转换成功。

int main()
{
	string str = "abcdef";
	cout << str << endl;;
	const char* ptr = str.c_str();
	cout << ptr[1] << endl;
}

运行后结果是:
在这里插入图片描述

2.data()与c_str()
data()方法与c_str()方法相似,都返回 const char* 类型。
在C++98版本中,c_str()返回 const char* 类型,返回的字符串会以空字符(null character)结尾;
在C++98版本中,data()返回 const char* 类型,返回的字符串不以空字符(null character)结尾;
在C++11版本中,c_str()与data()用法相同

3.substr()
函数原型

string substr(size_type _Off = 0,size_type _Count = npos) const;

_Off:所需的子字符串的起始位置。字符串中第一个字符的索引为 0,默认值为0。
_Count:复制的字符数目。
返回值:一个子字符串,从其指定的位置开始。
若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾。
示例:

int main()
{
	string str = "helloworld";
	string strSub = str.substr(0, 5);
	cout << strSub << endl;
}

运行后结果是:
在这里插入图片描述

4.计算string的长度,size()和length()
两者在计算string长度方面是没有多大区别的
c++标准库中二者源代码如下:

   _NODISCARD size_type length() const noexcept { // return length of sequence
        return _Get_data()._Mysize;
    }

    _NODISCARD size_type size() const noexcept { // return length of sequence
        return _Get_data()._Mysize;
    }     

length是因为沿用C语言的习惯而保留下来的,string类最初只有length,引入STL之后,为了兼容又加入了size,它是作为STL容器的属性存在的,便于符合STL的接口规则,以便用于STL的算法。

5.string比较compare()
两个字符串相同,返回0。
调用字符串小与被调用字符串,返回-1。
调用字符串大于被调用字符串,返回1。
compare()比较时逐字符比较的,一旦能比较出结果,就不再比较了。 例如“abc”和“adf”,首先a和a比较,比不出结果;则b和d比较,结果就是“abc”小于“adf”,返回-1。

int main()
{
	string str1 = "abcyeah";
	string str2 = "yeah";
	cout << str1.compare(str2) << endl;//输出-1
}

运行后结果是:
在这里插入图片描述

6.判空empty()
可以使用empty()对string对象进行判空

int main()
{
	string str1 = "abcyeah";
	string str2;
	if (str1.empty())
	{
		cout << "str1 is empty" << endl;
	}
	if (str2.empty())
	{
		cout << "str2 is empty" << endl;
	}
}

运行后结果是:
在这里插入图片描述

7.string的find()
在字符串中检索自字符串是否存在。

size_t find (const string& str, size_t pos = 0) const;//查找对象--string类对象
size_t find (const char* s, size_t pos = 0) const; //查找对象--字符串
size_t find (const char* s, size_t pos, size_t n) const;//查找对象--字符串的前n个字符
size_t find (char c, size_t pos = 0) const;//查找对象--字符

结果:找到 – 返回 第一个字符的索引

没找到–返回 string::npos(代表 -1 表示不存在)

int main()
{
	// 待检索的字符串
	string str("njbbanjn");
	// 需要检索的子串
	string strObj("a");

	// 子串位于字符串中的位置
	size_t Loc = str.find(strObj);
	// 如果检索到子串在字符串中,则打印子串的位置
	if (Loc != string::npos)//也可以是Loc!=-1
	{
		cout << "Loc is: " << Loc << endl;
	}

	return 0;
}

运行后结果是
在这里插入图片描述

8.string的insert()
在这里插入图片描述

int main()
{
    string strDemo = "I am";
 
    strDemo.insert(4, " good.");
 
    cout << "strDemo is: " << strDemo << endl;
 
    return 0;
}

运行后结果是:
在这里插入图片描述

9.int类型转string

int main()
{
	int num = 1234;
	string str;
	str = to_string(num);   //要添加#include<string>头文件 
	cout << "str is: " << str<< endl;

	return 0;
}

运行后结果是:
在这里插入图片描述
先总结这些,后面会酌情添加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值