C++Python字符串处理合集

char

定义

1
2
3
4
char a,b[10]; //定义字符变量a与字符数组b
char c[]="hello,world",d[]={'h','e','l','l','o',',','w','o','r','l','d'}; //字符数组的初始化,未指明数组长度,且数组中没有终止符,数组末尾将生成终止符\0,代表字符串结束,此时sizeof=strlen+1
char e[10]={'h','e','l','l','o'}; //初始化数据小于指定长度,剩余部分自动填充终止符
char f[10]={'h','e','l','l','o',',','w','o','r','l','d'}; //初始化数据大于指定长度,超过部分将被丢弃,此时数组中不含终止符,可能回造成不可预期的后果

长度计算

  1. strlen:strlen函数只计算可见的字符,从字符串开头到第一个终止符为止
  2. sizeof:计算整个数组长度

字符串比较

strcmp(st1,st2)

比较2个字符串,设这两个字符串为str1,str2:

  1. 若str1==str2,则返回零;
  2. 若str1 > str2,则返回正数;
  3. 若str1< str2,则返回负数。
  4. ==,>,<,是通过比较对应位置字符的ASCII码大小实现。

    strncmp(st1,st2,n)

    把st1,st2的前n个进行比较。

附加

1
2
3
strcat(st1,st2); //st1,st2所指内存区域不可以重叠,且st1必须有足够的空间来容纳st2的字符串。
返回指向st1的指针。
strncat(st1,st2,n); //n表示连接上st2的前n个给st1,在最后不要加'\0'。

C\C++中strcat()函数

替换

1
2
3
4
strcpy(st1,st2); //定义函数:char *strcpy(char *dest, const char *src);strcpy()会将参数src 字符串拷贝至参数dest 所指的地址。返回参数dest 的字符串起始地址。
//如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。
strncpy(st1,st2,n); //n表示复制st2的前n个给st1,在最后要加'\0'。

strcpy源码详解

查找

1
2
3
4
where = strchr(st,ch) //查找字符,查找字符串s中首次出现字符c的位置,返回首次出现c的位置的指针,如果s中不存在c则返回NULL。
where = strspn(st1,st2); //查找字符串。strspn() 从参数 st1 字符串的开头计算连续的字符,而这些字符都完全是 st2 所指字符串中的字符。简单的说,若 strspn() 返回的数值为n,则代表字符串 st1 开头连续有 n 个字符都是属于字符串 st2 内的字符。
//返回值:返回字符串 st1 开头连续包含字符串 st2 内的字符数目。所以,如果 st1 所包含的字符都属于 st2,那么返回 st1 的长度;如果 st1 的第一个字符不属于 st2,那么返回 0。
where = strstr(st1,st2); //strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。

string

string是C++标准库的一个重要的部分,想使用string首先要在头文件当中加入< string > 。

初始化

1
2
3
4
5
6
7
8
9
10
string st1(st2),st3=st4,st5("hello"),st5="hello",st6=string(10,'c'),st7(10,'c');//拷贝初始化
//通过字符数组初始化
char cs[]="HelloWorld";
string st8(cs);//复制字符串cs内容
string st9(cs,n);//复制字符串cs前n个字符
//通过string初始化
string st10(st11,n);//复制字符串st11第n位到结尾的字符
string st12(st11,n1,n2);//从st11[n1],向后拷贝n2个字符

子串

1
2
s.substr(pos1,n)//返回字符串位置为pos1后面的n个字符组成的串
s.substr(pos1)//返回字符串位置为pos1到结尾的串

注意substr没有迭代器作为参数的操作

插入

insert()

1
2
3
4
5
6
7
8
//s.insert(pos,str)//在s的pos位置插入str
//s.insert(pos,str,a,n)在s的pos位置插入str中插入位置a到后面的n个字符
//s.insert(pos,cstr,n)//在pos位置插入cstr字符串从开始到后面的n个字符
//s.insert(pos,cstr)在s的pos位置插入cstr
//s.insert(pos,n,ch)在s.pos位置上面插入n个ch
//s.insert(s.it,ch)在s的it指向位置前面插入一个字符ch,返回新插入的位置的迭代器
//s.insert(s.it,n,ch)//在s的it所指向位置的前面插入n个ch
//s.insert(it,str.ita,str.itb)在it所指向的位置的前面插入[ita,itb)的字符串

删除

erase()

1
2
3
str.erase (10,8); //直接指定删除的字符串位置第十个后面的8个字符
str.erase (str.begin()+9); //删除迭代器指向的字符
str.erase (str.begin()+5, str.end()-9); //删除迭代器范围的字符

拼接

+=

1
st1=st2+st3

append

1
2
3
4
5
6
7
8
9
10
11
12
//直接追加一个str2的字符串
str.append(str2);
//后面追加str3第6个字符开始的3个字符串
str.append(str3,6,3);
//追加字符串形参的前5个字符
str.append("dots are cool",5);
//直接添加
str.append("here: ");
//添加10个'.'
str.append(10u,'.');
//添加str3迭代器范围的字符串
str.append(str3.begin()+8,str3.end());

替换(replace())

支持整数寻址或迭代器

1
2
3
4
5
6
7
8
str.replace(pos1,n1,str3,pos2,n2);//str中第pos1个字符以及后面的n1个字符用str3的第pos2个字符以及后面的n2个字符代替,pos与n可省略
str.replace(it1,it2,str4);//可使用迭代器
/*
eg:
str.replace(str.begin()+8,str.begin()+14,"is coolness",7);
str.replace(8,6,"a shorty",7);
*/

赋值

assign,可使用整数与迭代器寻址

1
2
str.assign(str1,pos1,n1);//str1中第pos1个字符以及后面的n1个字符赋值给str,pos与n可省略
str.assign(it1,it2);//可使用迭代器,将迭代器范围内赋值给str

搜索

find

find函数主要是查找一个字符串是否在调用的字符串中出现过,查找成功时返回所在位置,失败返回string::npos的值。rfind作用与find类似,但是rfind为从后往前查找。

1
2
str.find(str1, pos, n)//str中pos位置开始,查找str1前n个字符,pos与n默认可省略
// eg. found=str.find("needles are small",found+1,6);

find_….of函数:

  1. find_first_of(args) 查找args中任何一个字符第一次出现的位置
  2. find_last_of(args) 最后一个出现的位置
  3. find_fist_not_of(args) 查找第一个不在args中的字符
  4. find_last_not_of 查找最后一个不在args中出现的字符

比较

compare函数类似strcmp函数,如果两个字符串相等,那么返回0,调用对象大于参数返回1,小于返回-1。

1
2
str.compare(pos1,n1,str3,pos2,n2);//str中第pos1个字符以及后面的n1个字符与str3的第pos2个字符以及后面的n2个字符比较,pos与n默认可省略
// eg. str1.compare(6,5,"apple") == 0

也可直接使用 >,<,== 进行比较。

数值转换

函数 效果
to_string(val) 把val转换成string
stoi(s,p,b) 把字符串s从p开始转换成b进制的int
stol(s,p,b) long
stoul(s,p,b) unsigned long
stoll(s,p,b) long long
stoull(s,p,b) unsigned long long
stof(s,p) float
stod(s,p) double
stold(s,p) long double

python

明确:对字符串的操作方法都不会改变原来字符串的值

  1. 去掉空格和特殊符号
1
2
3
4
name.strip() #去掉空格和换行符
name.strip('xx') # 去掉某个字符串
name.lstrip() #去掉左边的空格和换行符
name.rstrip() #去掉右边的空格和换行符
  1. 字符串的搜索和替换
1
2
3
4
5
6
7
8
name.count('x') #查找某个字符在字符串里面出现的次数
name.capitalize() #首字母大写
name.center(n,'-') # 把字符串放中间,两边用- 补齐
name.find('x') #找到这个字符返回下标,多个时返回第一个;不存在的字符返回-1
name.index('x') #找到这个字符返回下标,多个时返回第一个;不存在的字符报错
name.replace(oldstr, newstr) # 字符串替换
name.format() #字符串格式化
name.format_map(d) # 字符串格式化,传进去的是一个字典
  1. 字符串的测试和替换函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    S.startswith(prefix[,start[,end]])
    #是否以prefix开头
    S.endswith(suffix[,start[,end]])
    #以suffix结尾
    S.isalnum()
    #是否全是字母和数字,并至少有一个字符
    S.isalpha() #是否全是字母,并至少有一个字符
    S.isdigit() #是否全是数字,并至少有一个字符
    S.isspace() #是否全是空白字符,并至少有一个字符
    S.islower() #S中的字母是否全是小写
    S.isupper() #S中的字母是否便是大写
    S.istitle() #S是否是首字母大写的
  2. 字符串的分割

    1
    2
    name.split() #默认是按照空格分割
    name.split(',') #按照逗号分割
  3. 连接字符串

    1
    ','.join(slit) #用逗号连接slit 变成一个字符串,slit 可以是字符,列表,字典(可迭代的对象)int 类型不能被连接

参考资料

  1. https://blog.csdn.net/tengfei461807914/article/details/52203202
  2. https://www.cnblogs.com/lidabo/p/3487043.html
  3. https://www.cnblogs.com/chendai21/p/8137285.html

本文标题:C++Python字符串处理合集

文章作者:微石

发布时间:2018年07月16日 - 10:07

最后更新:2018年07月19日 - 11:07

原始链接:akihoo.github.io/posts/1584f721.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。