一.strncmp
下面是 strncmp() 函数的声明。
int strncmp(const char *str1, const char *str2, size_t n)
参数
- str1 -- 要进行比较的第一个字符串。
- str2 -- 要进行比较的第二个字符串。
- n -- 要比较的最大字符数。
返回值
该函数返回值如下:
- 如果返回值 < 0,则表示 str1 小于 str2。
- 如果返回值 > 0,则表示 str2 小于 str1。
- 如果返回值 = 0,则表示 str1 等于 str2。
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abcdef");
strcpy(str2, "ABCDEF");
ret = strncmp(str1, str2, 4);
if(ret < 0)
{
printf("str1 小于 str2");
}
else if(ret > 0)
{
printf("str2 小于 str1");
}
else
{
printf("str1 等于 str2");
}
return(0);
}
//结果:str2 小于 str1
二.string类型:
2.1 find()
以下所讲的所有的string查找函数,都有唯一的返回类型,那就是size_type,即一个无符号整数(按打印出来的算)。若查找成功,返回按查找规则找到的第一个字符或子串的位置;若查找失败,返回npos,即-1(打印出来为4294967295)。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s("zm ss as ds zm");
cout<<s.find("zm")<<endl;
cout<<s.find("zz")<<endl;//npos很大就对了
cout<<s.find("zm",0)<<endl;//表示从标号0开始搜索,与第一种情况一样
cout<<s.find("zm",1)<<endl;//表示从标号1开始搜索
return 0;
}
2.2 size()
2.3 replace()
用法一:用str替换指定字符串从起始位置pos开始长度为len的字符
string& replace (size_t pos, size_t len, const string& str);
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "he is@ a@ good boy";
str=str.replace(str.find("a"),2,"#"); //从第一个a位置开始的两个字符替换成#
cout<<str<<endl;
return 0;
}
结果如下:
用法二: 用str替换 迭代器起始位置 和 结束位置 的字符
string& replace (const_iterator i1, const_iterator i2, const string& str);
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "he is@ a@ good boy";
str=str.replace(str.begin(),str.begin()+5,"#"); //用#替换从begin位置开始的5个字符
cout<<str<<endl;
return 0;
}
结果如下:
用法三: 用substr的指定子串(给定起始位置和长度)替换从指定位置上的字符串
string& replace (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen);
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "he is@ a@ good boy";
string substr = "12345";
str=str.replace(0,5,substr,substr.find("1"),4); //用substr的指定字符串替换str指定字符串
cout << str << endl;
return 0;
}
结果如下:
2.4 substr()
截取子串用的
#include<string>
#include<iostream>
using namespace std;
int main()
{
string x="Hello_World";
/*默认截取从0到npos.重载原型为string substr(_off=0,_count=npos);npos一般表示为string类中不存在的位置,_off表示字符串的开始位置,_count截取的字符的数目*/
cout<<x.substr()<<endl;
cout<<x.substr(5)<<endl;//截取x[5]到结尾,即npos.重载原型为string substr(_off,_count=npos)
cout<<x.substr(0,5)<<endl;//以x[0]为始,向后截取5位(包含x[0]),重载原型string substr(_off,_count)
/*
备注:
指定的截取长度加起始位置即_off+_count>源字符串的长度,则子字符串将延续到源字符串的结尾
*/
}
2.5 赋予初值
string st1("babbabab");
string x="Hello_World";
2.6 erase
2.6 erase方法原型
1. basic_string & erase(size_type pos=0, size_type n=npos);
即从给定起始位置pos处开始删除, 要删除字符的长度为n, 返回值修改后的string对象引用
#include<iostream>
#include<string>
using namespace std;
int main(){
string str = "hello c++! +++";
// 从位置pos=10处开始删除,直到结尾
// 即: " +++"
str.erase(10);
cout << '-' << str << '-' << endl;
// 从位置pos=6处开始,删除4个字符
// 即: "c++!"
str.erase(6, 4);
cout << '-' << str << '-' << endl;
return 0;
}
2. iterator erase(const_iterator position)
删除迭代器位置处的单个字符, 并返回下个元素的迭代器
3. iterator erase(const_iterator first, const_iterator last)
删除迭代器[first, last)区间的所有字符,返回一个指向被删除的最后一个元素的下一个字符的迭代器.
示例[2,3]:
#include<iostream>
#include<string>
using namespace std;
int main(){
string str = "hello c++! +++";
// 删除"+++"前的一个空格
str.erase(str.begin()+10);
cout << '-' << str << '-' << endl;
// 删除"+++"
str.erase(str.begin() + 10, str.end());
cout << '-' << str << '-' << endl;
return 0;
}
补充
除了erase
方法用于删除string中的元素, void pop_back();
方法也可以用来删除元素, 但是只能删除string的最后一个元素
2.7 str1.compare(str2)
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s1="xiabin",s2="asdas",s3="xiabin",s4="zzzz";
cout<<s1.compare(s2)<<endl;
cout<<s1.compare(s3)<<endl;
cout<<s1.compare(s4)<<endl;
return 0;
}
相等返回0, str1.compare(str2) str1<str2返回负数,str1>str2返回正数