当前位置:   article > 正文

c++常见字符串处理函数和常见字符处理函数_c++ 字符串函数

c++ 字符串函数

C++常见字符串处理函数

一、C风格字符串

c风格字符串:在c++中使用字符数组的形式来表示字符串

char text[] = "abcdef";
	int len1 = sizeof(text);
	int len2 = strlen(text);
	cout << "字符串占实际内存大小:" << len1 << endl;
	cout << "字符串长度:" << len2 << endl;
  • 1
  • 2
  • 3
  • 4
  • 5

其他适用于c语言字符串的函数也适用于c++

二、string字符串

string字符串是可变长字符串,一般优先使用它,尽量避免使用c风格字符串。
string是一个类,std::string

1、利用string来创建字符串

#include<cstring>

string s1; //创建一个空字符串对象s1
string s2(s1); //用已有的字符串对象创建新的字符串对象s2
string s3(text); //用c风格字符串常量创建字符串对象s3
string s4("Hello "); //直接创建s4
string s5(5, 'c'); //用若干个字符创建字符串对象s5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2、读写string字符串

1> 通过键盘输入输出:
#include<string>

cin >> s1; //遇到空格会停止输入
cout << s1 << endl ;

getline(cin, s1);  //getline函数,遇回车才会停止,括号里第一个参数是输入流对象,这里是cin,第二个参数是string字符串
cout << s1 << endl ;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
2> 用赋值运算符给string字符串赋值
s1 = "China";
s2 = s1; //值赋值,对s2做处理不会影响s1
  • 1
  • 2
3>用assign函数给字符串赋值
s1.assign("CHINA");
s2.assign(s1);
  • 1
  • 2
4> 访问字符串里的单个字符
string s4("Hello ");
cout << s4[0] << s4.at(3) << endl;
  • 1
  • 2

3、常见的字符串函数

1> 字符串长度:
int len = s1.size(); //或者int len = s1.length()
cout << len << endl;
  • 1
  • 2

max_size函数返回一个字符串最多能够包含的字符数,不同计算机、操作系统、编译器的结果可能都不同
如果字符串长度超过max_size,会抛出length_error

cout << s1.max_size() << endl;
  • 1

capacity():字符串重新分配内存空间之前字符串所能包含的最大字符数(在后面创建容器的章节里会很重要),capacity是容量,要与size长度区分开来

reserve(n):为字符串预留存放n个字符的内存空间。

2> 将string字符串转换成字符数组或者C风格字符串
data函数将字符串转换为字符数组(不包含’\0’)
const char* p = s4.data(); 
for (int i = 0; i < s4.size(); i++) {
	cout << *(p + i);
}
  • 1
  • 2
  • 3
  • 4
c_str函数将字符串转换为C风格字符串(包含’\0’)
const char* q = s4.c_str();
cout << q << endl; 
  • 1
  • 2
3> 连接字符串

用 + 或者 +=直接连接
运算符+两边至少有一个string字符串,另一个可以是C风格字符串或者char字符
运算符+=左边必须是string字符串,右边可以是string字符串、C风格字符串或char字符

s2 = s4 + s1;
cout << s2 << endl;
s2 += s2;
cout << s2 << endl;
  • 1
  • 2
  • 3
  • 4

也可以用append函数在原字符串末尾追加字符串

s2.append("!");
cout << s2 << endl;
  • 1
  • 2
4>字符串比较大小:

直接用> 、 < 、 >= 、 <= 、==、!=
会区分大小写
也可以使用compare(str1,str2)函数比较大小,str1>str2则返回正整数,相等返回0,str1<str2返回负数,str1必须是string字符串

5> 删除字符串:

删除子串:s1.erase(子串起始位置,子串结束位置)

6> 清空字符串:s.clear()
7>插入字符串:

插入子串:s1.insert(子串插入位置,要插入的子串)

8> 替换字符串:

替换子串:s1.replace(要替换子串的起始位置,要替换子串的长度,新子串)

9> 交换字符串:s1.swap(s2)
10> 提取子串:s1.substr(子串起始位置,子串结束位置)
11>查找字符串:

find(要查找的子串或字符,查找的起始位置,查找的字符个数)
find从左至右查找第一个匹配的子串或字符,rfind从右至左查找
找到返回匹配的下标位置,没找到返回string::npos,它的值为1,可以将其强制转换为int

string::size_type index = str.find(" ", 0);

index == string::npos //未找到匹配子串或字符
  • 1
  • 2
  • 3
12> 字符串算法:

要包含头文件#include < algorithm >
逆序算法:reverse

reverse(s1.begin(), s1.end()); //逆序算法 begin()返回字符串首字母位置,end()返回字符串最后一个字符的下一个位置,逆序排序是从begin()位置开始到end()位置,但不包括end()位置

reverse(str.begin()+i, str.begin()+j);
从str[i]位置开始到str[j],不包括str[j],进行逆序排序

  • 1
  • 2
  • 3
  • 4
  • 5

sort排序算法:
按字典顺序升序进行排序:

sort(s1.begin(), s1.end());
//对s1字符串中的字符进行升序排序

string str[4] = {"Ada","ALOGL","BASIC","JAva"};
sort(str, str + 4);
//对字符串数组进行排序
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

按字典顺序降序进行排序:

bool cmp(char ch1,char ch2){
 	return ch1>ch2;
}
sort(s1.begin(), s1.end(),cmp);
//对s1字符串中的字符进行降序排序

bool cmp(string str1, string str2) {
	return str1 > str2;
}
string str[4] = {"Ada","ALOGL","BASIC","JAva"};
sort(str, str + 4,cmp);
//对字符串数组进行降序排序
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

C++常见字符处理函数

int isdigit(int ch)
isdigit通过判断参数的十进制数是不是在48-57(ascll表里字符0对于48,字符9对应57)来判断它是不是十进制数字字符。
是十进制数字则返回4(本台电脑上是这样),不是返回0

int num = 8;
cout <<"传入int类型num:"<< isdigit(num) << endl;//输出0
char ch = '8';
cout << "传入char类型ch:" << isdigit(ch) << endl;//输出4
cout << "传入char类型‘8’对应的十进制数字56: " << isdigit(56) << endl;//输出4
  • 1
  • 2
  • 3
  • 4
  • 5

以下函数同理:

int isxdigit(int ch): 判断读入的字符是否是十六进制数字,是返回128,不是返回0

int isalpha(int ch):判断ch是否为字母
int islower(int ch):判断ch是否为小写字母
int isupper(int ch): 判断ch是否为大写字母
int isalnum(int ch): 判断ch是否为字母或数字
int isspace(int ch): 判断ch是否为空白字符(包括空格,换页符\f,换行符\n,回车符\r,水平制表符\t,垂直制表符\v)
int iscntrl(int ch): 判断ch是否为控制字符(控制字符不可打印)
int isgraph(int ch): 判断ch是否为可打印字符(不包括空格)
int isprint(int ch): 判断ch是否为可打印字符(包括空格)
int ispunct(int ch): 判断ch是否为标点符号(包括除了空格、字母和数字之外的所有可打印字符)
int tolower(int ch):将参数ch中的大写字母转换为小写字母,如果不是字母保持原有值不变
int toupper(int ch):将参数ch中的小写字母转换为大写字母,如果不是字母保持原有值不变
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/76114
推荐阅读
相关标签
  

闽ICP备14008679号