1. 截取子串
s.substr(pos, n) 截取s中从pos开始(包括0)的n个字符的子串,并返回
s.substr(pos) 截取s中从
从pos开始(包括0)到末尾的所有字符的子串,并返回
2. 替换子串
s.replace(pos, n, s1)
用s1替换
s中从pos开始(包括0)的n个字符的子串
3. 查找子串
s.find(s1) 查找s中第一次出现s1的位置,并返回(包括0)
s.rfind(s1)
查找s中最后次出现s1的位置,并返回(包括0)
s.find_first_of(s1) 查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)
s.find_last_of(s1) 查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)
s.fin_first_not_of(s1) 查找s中第一个不属于s1中的字符的位置,并返回(包括0)
s.fin_last_not_of(s1) 查找s中最后一个不属于s1中的字符的位置,并返回(包括0)
1. 截取子串 s.substr(pos, n) 截取s中从pos开始(包括0)的n个字符的子串,并返回 s.substr(pos) 截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回2. 替换子串 s.replace(pos, n, s1) 用s1替换s中从pos开始(包括0)的n个字符的子串
首先,我们要给出完整的
string
类,包括构造
函数
,析构
函数
,私有成员char* str
并且在类内声明要实现的
函数
(本文我只实现了operator=,operator[ ],pushback(),以及三个operator+=,五个insert等)
#include<iostream>
#include<c
string
>
using namespace std;
class
String
friend ostream& o
string
常用
截取
字符串方法有很多,但是配合使用以下两种,基本都能满足要求:
find(
string
strSub, npos);
find_last_of(
string
strSub, npos);
其中strSub是需要寻找的子字符串,npos为
查找
起始位置。找到返回子字符串首次出现的位置,否则返回-1;
(1)find_last_of的npos为从末尾开始寻找的位置。
(2)下文中用到的strsub(npos,size)
函数
,其中npos为开始位置,size为
截取
大小
例1:直接
查找
字符串中是否具有某个字符串(返回”2″)
std::
string
strPath = E:\\
* @return
截取
好的字符串vector
std::vector<std::
string
> splitStr(std::
string
str, std::
string
pattern)
std::
string
::size_type pos;
std::vector<std.
在c语言中,并没有出现substr或者sub
string
方法。然而在1983,substr()方法已经出现在
C++
语言中了。然而这时候还没有出现sub
string
, 所以可以见得:substr是stu
string
的老大哥
string
substr (size_t pos = 0, size_t len = npos) const;
从
C++
的方法定义中可以看到, substr的参数是开始下标,以及字符串长度。
std::
string
str="We think in generalities, bu
在
C++
里
截取
字符串可以使用
string
.substr(),可是这个
函数
只能按英文来
截取
,
如果是汉字可能就要计算好字符个数,如果是汉字和英文混合,那就只能望洋兴叹了。
可是恰好我需要这样一个
函数
,于是就自己实现了一个,其中如何判断汉字和英文
参看了此处。
代码简单也无优化,若有更好的方法欢迎提出,代码如下。
#include
#include
#include
#include
#include
using namespace std;
int is_zh_ch(char p)
/*汉字的两
在
C++
的char*以及
string
中,使用的是字节流编码,即sizeof(char) == 1。
也就是说,
C++
是不区分字符的编码的。
而一个合法UTF8的字符长度可能为1~4位。
现在假设一串输入为UTF8编码,如何能准确的定位到每个UTF8字符的“CharPoint”,而不会错误的分割字符呢?
参考这个页面:http://www.nubaria.com/en/blog/?p=289
可以改造出下面的
函数
:
const unsigned char kFirstBitMask = 128; // 1000000
const unsigned char kSecondBitMask =
最近在处理游戏敏感词之类的东西,为了加强屏蔽处理,所以需要过滤掉字符串中的除汉字之外的是其他东西如数字,符号,英文字母等。
首先我查阅资料并写了个
函数
:
示例:返回输入字符串中汉字的个数:
std::
string
StrWithOutSymbol(const std::
string
&source)
string
sourceWithOutSymbol;
int i = 0;
while (source[i] != 0)
if (source[i] & 0x80 )
sourceWithOutSymbol += source[i];
source
截取
子串
s.substr(pos, n)
截取
s中从pos开始(包括0)的n个字符的
子串
,并返回s.substr(pos)
截取
s中从从pos开始(包括0)到末尾的所有字符的
子串
,并返回
替换
子串
s.replace(pos, n, s1) 用s1
替换
s中从pos开始(包括0)的n个字符的
子串
查找
子串
s.find(s1)
查找
s中第一次出现s1的位置,并返回
s.find(s1) //
查找
s中第一次出现s1的位置,并返回(包括0)
s.rfind(s1) //
查找
s中最后次出现s1的位置,并返回(包括0)
s.find_first_of(s1) //
查找
在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)
s.find_last_of(s1) //
查找
在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)
s.fin_first_not_of(s1)