C16.【C++ Cont】string类字符串的关系运算和与string有关的函数
目录
1.知识回顾:strcmp函数
2.六个关系运算符
示例代码1
运行结果
示例代码2
运行结果
3.stoi和stol函数
1.stoi函数
函数声明
使用说明
示例代码3
运行结果
示例代码4
运行结果
示例代码5
运行结果
示例代码6
运行结果
2.stol函数
4.stod和stof函数
1.stod函数
函数声明
示例代码7
运行结果
2.stof函数
5.to_string函数(注意有下划线!!!)
函数声明
示例代码8
运行结果
1.知识回顾:strcmp函数
参见53.【C语言】 字符函数和字符串函数(strcmp函数)文章
C++的字符串的关系运算比strcmp函数的功能要强大
2.六个关系运算符
cplusplus官网的介绍 点我跳转
C++98标准
//注:const string& lhs为string类字符串
//注: const char*为C语言风格的字符串
(1)
bool operator== (const string& lhs, const string& rhs);//s1==s2
bool operator== (const char* lhs, const string& rhs);//s1==s2
bool operator== (const string& lhs, const char* rhs);//s1==s2
(2)
bool operator!= (const string& lhs, const string& rhs);//s1!=s2
bool operator!= (const char* lhs, const string& rhs);//s1!=s2
bool operator!= (const string& lhs, const char* rhs);//s1!=s2
(3)
bool operator< (const string& lhs, const string& rhs);//s1<s2
bool operator< (const char* lhs, const string& rhs);//s1<s2
bool operator< (const string& lhs, const char* rhs);//s1<s2
(4)
bool operator<= (const string& lhs, const string& rhs);//s1<=s2
bool operator<= (const char* lhs, const string& rhs);//s1<=s2
bool operator<= (const string& lhs, const char* rhs);//s1<=s2
(5)
bool operator> (const string& lhs, const string& rhs);//s1>s2
bool operator> (const char* lhs, const string& rhs);//s1>s2
bool operator> (const string& lhs, const char* rhs);//s1>s2
(6)
bool operator>= (const string& lhs, const string& rhs);//s1>=s2
bool operator>= (const char* lhs, const string& rhs);//s1>=s2
bool operator>= (const string& lhs, const char* rhs);//s1>=s2
注:两个C语言风格的字符串不能直接比较!!!
比较的过程和strcmp一样:基于字典序进行,比较是对应位置上字符的ASCII值的大小,不是字符串的长度
备注:<=指的是小于或等于;>=指的是大于或等于
示例代码1
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1="abc";
string s2="abc";
string s3="def";
string s4="abe";
string s5="aba";
if (s1==s2)
cout<<"s1==s2"<<endl;
if (s1!=s3)
cout<<"s1!=s3"<<endl;
if (s1<s4)
cout<<"s1<s4"<<endl;
if (s1>s5)
cout<<"s1>s5"<<endl;
return 0;
}
运行结果
示例代码2
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1="abc";
char s2[]="abc";//C语言风格的字符串
if (s1==s2)
cout<<"s1==s2"<<endl;
return 0;
}
运行结果
3.stoi和stol函数
stoi全称string to int,即把字符串转换为整型;stol全称string to long int,即把字符串转换为长整型
cplusplus官网对stoi函数的介绍 点我跳转
cplusplus官网对stol函数的介绍 点我跳转
1.stoi函数
函数声明
int stoi (const string& str, size_t* idx = 0, int base = 10);
注:要包含<string>头文件 (cplusplus官网stoi函数有两种声明,这里只介绍第一种)
使用说明
1.str表示被转换的string类型的字符串
2.idx(全称index,即索引)是一个输出型参数,即这个通过这个参数会带回一个值;idx 是一个指针,需要在外边创建一个size_t 类型的变量,传递它的地址给idx,这个参数将会带回str中无法正确匹配数字的第一个字符的位置
3.base表示被解析的字符串中数字的进制值,可以是2、8、10、16或0
默认情况下这个值是10,表示为10进制数字
如果传递的是2,表示被解析的字符串中是2进制的数字,最终会转换成10进制
如果传递的是8,表示被解析的字符串中是8进制的数字,最终会转换成10进制
如果传递的是16,表示被解析的字符串中是16进制的数字,最终会转换成10进制
如果传递的是0,会根据字符串的内容的信息自动推导进制,例如:字符串中有0x就认为
是16进制,0开头会被认为是8进制,最终会转换成10进制
示例代码3
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s="123abc";
size_t idx=0;
int ret=stoi(s,&idx);//默认十进制
cout<<ret<<endl;//以十进制打印
cout<<"idx:"<<idx<<endl;
return 0;
}
运行结果
注:示例代码中如果不想用idx接收,stoi的第二个参数可以写成NULL或者0
示例代码4
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s="110123abc";
size_t idx=0;
int ret=stoi(s,&idx,2);//二进制
cout<<ret<<endl;//以十进制打印
cout<<"idx:"<<idx<<endl;
return 0;
}
运行结果
示例代码5
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s="1728abc";
size_t idx=0;
int ret=stoi(s,&idx,8);//默认十进制
cout<<ret<<endl;//以十进制打印
cout<<"idx:"<<idx<<endl;
return 0;
}
运行结果
示例代码6
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s="0x12ff40gh";
size_t idx=0;
int ret=stoi(s,&idx,0);//第三个参数为0为自动推导
cout<<ret<<endl;//以十进制打印
cout<<"idx:"<<idx<<endl;
return 0;
}
运行结果
2.stol函数
和stoi用法一样,只不过int类型换成了long int类型,这里不再赘,注:要包含<string>头文件
4.stod和stof函数
stod全称string to double,即把字符串转换为双精度浮点数;stof全称string to float,即把字符串转换为单精度浮点数
cplusplus官网对stod函数的介绍 点我跳转
cplusplus官网对stof函数的介绍 点我跳转
注:要包含<string>头文件
1.stod函数
函数声明
double stod (const string& str, size_t* idx = 0);
和stoi 函数的比较的话,少了描述字符串中数字进制的参数,其他参数一致
注:要包含<string>头文件 (cplusplus官网stoi函数有两种声明,这里只介绍第一种)
示例代码7
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s="13.12aaa";
double ret=stod(s,NULL);
cout<<ret<<endl;
return 0;
}
运行结果
2.stof函数
和stod用法一样,只不过double类型换成了float类型,这里不再赘,注:要包含<string>头文件
5.to_string函数(注意有下划线!!!)
to_string顾名思义:将数字转换为字符串
cplusplus官网对to_sting函数的介绍 点我跳转
函数声明
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
可以看出,可以将不同类型的数字转换为字符串 ,注:要包含<string>头文件
示例代码8
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s=to_string(3.14);
cout<<s<<endl;
return 0;
}