常见用法
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;
}
运行后结果是:
先总结这些,后面会酌情添加。