字符串函数总结

一.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类中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返回正数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值