字符串
●【1】字符数组
在 C++ 中,字符数组是一种特殊的数组类型,用于存储一串字符。字符数组在程序中广泛应用,例如存储字符串、输入输出字符串、处理字符串等,需要头文件#include <cstring>
。
定义一个字符数组的基本语法如下:
char str[] = "hello world"; // 可以指定长度也可以不指定长度
在上述示例中,定义了一个名为 str
的字符数组,用于存储字符串 "hello world"。由于字符数组的长度是不确定的,因此可以省略数组长度。
可以使用下标运算符 []
访问字符数组中的元素。例如:
char ch = str[0]; // 将字符数组的第一个字符赋值给变量 ch
字符串输入输出
在 C++ 中,可以使用输入输出流对象 cin
和 cout
进行字符串的输入输出。
使用 cin
进行字符串的输入时,可以使用 getline()
函数,该函数会读取一行字符串(包括空格),并将其存储到字符数组中。例如:
char str[100]; cout << "请输入一个字符串:" << endl; cin.getline(str, 100); cout << "输入的字符串为:" << str << endl;
在上述示例中,使用 cin.getline()
函数读取一行字符串,并将其存储到名为 str
的字符数组中。然后使用 cout
输出该字符数组中的内容。
使用 cout
进行字符串的输出时,可以直接输出字符数组的名称,该操作会将整个字符数组中的内容输出到屏幕上。例如:
char str[] = "hello world"; cout << str << endl;
字符数组处理函数
-
strlen()
函数:返回字符数组中的字符串长度(不包括空字符\0
)。#include <iostream> #include <cstring> using namespace std; int main(){ char str[] = "hello world"; int len = strlen(str); cout << "字符串长度为:" << len << endl; return 0; }
在上述示例中,使用
strlen()
函数获取字符串 "hello world" 的长度,并将其赋值给变量len
,然后输出字符串长度。 -
strcpy()
函数:将一个字符数组中的字符串复制到另一个字符数组中。#include <iostream> #include <cstring> using namespace std; int main(){ char str1[] = "hello world"; char str2[20]; strcpy(str2, str1); cout << "复制后的字符串为:" << str2 << endl; return 0; }
在上述示例中,使用
strcpy()
函数将字符数组str1
中的字符串复制到字符数组str2
中,并输出复制后的字符串。 -
strcat()
函数:将一个字符数组中的字符串连接到另一个字符数组中。#include <iostream> #include <cstring> using namespace std; int main(){ char str1[20] = "hello "; char str2[] = "world"; strcat(str1, str2); cout << "连接后的字符串为:" << str1 << endl; return 0; }
在上述示例中,使用
strcat()
函数将字符数组str2
中的字符串连接到字符数组str1
中,并输出连接后的字符串。 -
strcmp()
函数:比较两个字符数组中的字符串是否相同。#include <iostream> #include <cstring> using namespace std; int main(){ char str1[] = "hello"; char str2[] = "world"; if (strcmp(str1, str2) == 0){ cout << "两个字符串相同" << endl; } else { cout << "两个字符串不同" << endl; } return 0; }
在上述示例中,使用
strcmp()
函数比较字符数组str1
和字符数组str2
中的字符串是否相同,如果相同则输出 "两个字符串相同",否则输出 "两个字符串不同"。
注意事项
在使用字符数组时,需要注意以下几点:
-
字符数组需要预留一个额外的空间来存储空字符
\0
,该字符用于标记字符串的结束。 -
字符数组在定义时需要指定长度,否则将无法存储完整的字符串。
-
字符数组中的字符串不可修改,因此需要使用字符串处理函数来完成字符串的修改操作。
●【2】字符串
string
是 C++ 标准库中的字符串类型,它提供了灵活、高效且易于使用的字符串处理功能。与 C 风格的字符数组相比,string
更安全、更易于管理,并具有更多的功能。
C++ 中的 string
类型是用于表示字符串的一种数据类型,它可以存储任意长度的字符串,并提供了一些常用的字符串操作方法,例如字符串的连接、查找、替换、截取等,需要#include <string>
。
声明和初始化
#include <string> string s1; // 默认构造函数,创建一个空字符串 string s2("Hello"); // 从 C 风格字符串初始化 string s3 = "World"; // 从 C 风格字符串初始化,使用赋值语法 string s4(s2); // 使用另一个 string 对象初始化 string s5(5, 'a'); // 用特定字符重复多次来初始化 const char *c_str = "Hello, World!"; // 根据字符数组创建字符串 string str(c_str);
字符串输入
不带空格
string str; cin >> str; // 读取一个字符串(遇到空白字符会停止)
带空格
string str; getline(cin, str); // 读取一行字符串(包括空白字符)
字符串输出
cout输出
string str = "HelloWorld"; cout << str;
使用下标遍历
for(int i = 0; i < str.size(); i++){ cout << str[i] << endl; }
使用范围 for 循环遍历
for(char ch : str){ cout << ch << endl; }
string处理函数
length() / size()
-
字符串长度:
length()
或size()
成员函数,返回字符串对象中字符的数量。size_t length() const noexcept; size_t size() const noexcept;
length
和size
函数返回字符串的长度。返回值类型为size_t
。string str = "hello world"; size_t len = str.length(); cout << "字符串长度为:" << len << endl;
在上述示例中,使用
length()
函数获取字符串 "hello world" 的长度,并将其赋值给变量len
,然后输出字符串长度。
empty()
-
检查字符串是否为空:
empty()
成员函数,返回字符串是否为空(不包含任何字符)。bool empty() const noexcept;
empty
函数返回字符串是否为空。如果字符串为空,返回true
;否则返回false
。string str1 = "hello"; string str2 = ""; bool isEmpty1 = str1.empty(); bool isEmpty2 = str2.empty(); cout << "字符串str1是否为空:" << isEmpty1 << endl; cout << "字符串str2是否为空:" << isEmpty2 << endl;
在上述示例中,使用
empty()
函数检查字符串 "hello" 和空字符串是否为空,并输出结果。
append()
-
添加字符串:
append()
成员函数,将给定的字符串添加到当前字符串的末尾。string& append(const string& str); string& append(const string& str, size_t pos, size_t count); string& append(const char* str); string& append(const char* str, size_t count); string& append(size_t count, char ch);
append
函数用于将给定的字符串添加到当前字符串的末尾。它有多种重载形式,可接受不同类型的参数。-
将一个字符串对象添加到当前字符串末尾
-
从给定字符串的指定位置开始,添加指定数量的字符到当前字符串末尾
-
将一个字符数组添加到当前字符串末尾
-
将一个字符数组中指定数量的字符添加到当前字符串末尾
-
将指定数量的某个字符添加到当前字符串末尾
string str1 = "hello"; str1.append(" world"); cout << "添加后的字符串为:" << str1 << endl;
在上述示例中,使用
append()
函数将字符串 " world" 添加到字符串 "hello" 的末尾,并输出结果。 -
substr()
-
提取子字符串:
substr()
成员函数,返回一个从指定位置开始的指定长度的子字符串。string substr(size_t pos = 0, size_t len = npos) const;
substr
函数返回一个从pos
位置开始,长度为len
的子字符串。string str = "hello world"; string sub = str.substr(0, 5); cout << "子字符串为:" << sub << std::endl;
在上述示例中,使用
substr()
函数从字符串 "hello world" 中提取一个从位置 0 开始,长度为 5 的子字符串,并将其赋值给变量sub
,然后输出子字符串。
find()
-
查找子字符串:
find()
成员函数,查找指定子字符串在当前字符串中首次出现的位置。size_t find(const string& str, size_t pos = 0) const noexcept;
find
函数在当前字符串中从位置pos
开始查找子字符串str
首次出现的位置。如果找到,返回子字符串的起始位置;如果找不到,返回npos
。string str = "hello world"; size_t pos = str.find("world"); if(pos != string::npos){ cout << "找到子字符串,位置为:" << pos << endl; }else{ cout << "未找到子字符串" << endl; }
在上述示例中,使用
find()
函数查找子字符串 "world" 在字符串 "hello world" 中首次出现的位置,并将其赋值给变量pos
,然后输出位置。
replace()
-
替换子字符串:
replace()
成员函数,用指定字符串替换当前字符串中指定位置开始的指定长度的子字符串。string& replace(size_t pos, size_t len, const string& str);
replace
函数从位置pos
开始,用字符串str
替换长度为len
的子字符串。string str = "hello world"; str.replace(0, 5, "goodbye"); cout << "替换后的字符串为:" << str << endl;
在上述示例中,使用
replace()
函数替换字符串 "hello world" 中从位置 0 开始,长度为 5 的子字符串为 "goodbye",然后输出替换后的字符串。
push_back() / pop_back()
-
添加/删除字符:
push_back()
和pop_back()
成员函数,分别用于在字符串末尾添加字符和删除末尾字符。void push_back(char c); void pop_back();
push_back
函数在字符串末尾添加字符c
,pop_back
函数删除字符串末尾的字符。string str = "hello"; str.push_back('!'); cout << "添加字符后的字符串为:" << str << endl; str.pop_back(); cout << "删除字符后的字符串为:" << str << endl;
在上述示例中,首先使用
push_back()
函数在字符串 "hello" 的末尾添加字符 '!',然后输出添加后的字符串;接着使用pop_back()
函数删除末尾字符,然后输出删除后的字符串。
erase()
-
删除子字符串:
erase()
成员函数,删除字符串中指定位置开始的指定长度的子字符串。string& erase(size_t pos = 0, size_t len = npos);
erase
函数从位置pos
开始删除长度为len
的子字符串。string str = "hello world"; str.erase(5, 6); cout << "删除后的字符串为:" << str << endl;
在上述示例中,使用
erase()
函数删除字符串 "hello world" 中从位置 5 开始,长度为 6 的子字符串,并输出删除后的字符串。
insert()
-
插入字符串:
insert()
成员函数,将给定的字符串插入到当前字符串的指定位置。string& insert(size_t index, const string& str); string& insert(size_t index, const string& str, size_t pos, size_t count); string& insert(size_t index, const char* str); string& insert(size_t index, const char* str, size_t count); string& insert(size_t index, size_t count, char ch);
insert
函数用于将给定的字符串插入到当前字符串的指定位置。它有多种重载形式,可接受不同类型的参数。-
在当前字符串指定位置插入一个字符串对象
-
在当前字符串指定位置插入给定字符串的指定位置开始的指定数量的字符
-
在当前字符串指定位置插入一个字符数组
-
在当前字符串指定位置插入一个字符数组中指定数量的字符
-
在当前字符串指定位置插入指定数量的某个字符
string str1 = "hello"; str1.insert(5, " world"); cout << "插入后的字符串为:" << str1 << endl;
在上述示例中,使用
insert()
函数将字符串 " world" 插入到字符串 "hello" 的第 5 个位置,并输出结果。 -
字符数组与字符串的关系
字符数组: char类型的集合
// 注意'\0'存在 char s[6] = {'1', '2', '3', '4', '5', '6'}; cout << s << endl; s[3] = '\0'; cout << s << endl; char s[6] = {"12345"}; char s[6] = "12345"; // 上面两种写法都行, 但是长度最多只能填5个, 自带一个'\0';
字符串: 在C++里面对C语言的字符数组进行的封装
区别 | 字符数组 | string |
---|---|---|
头文件 | #include <cstring> | #include <string> |
长度 | strlen(s) | s.size() / s.length() |
拼接 | strcat(s1, s2) => s2拼在s1后面 | s1 += s2; |
复制 | strcpy(s1, s2) => s2给s1 | s1 = s2; |
比较 | strcmp(s1, s2) => 正s1大, 负s2大, 0一样大 | > < >= <= == != |
cctype头文件
#include <cctype> char c; cctype头文件中的常用函数列表如下: 函数名称 返回值 isupper() 如果参数是大写字母, 函数返回true islower() 如果参数是小写字母, 函数返回true isdigit() 如果参数是数字(0~9), 函数返回true isalnum() 如果参数是字母数字, 即字母或者数字, 函数返回true isalpha() 如果参数是字母, 函数返回true iscntrl() 如果参数是控制字符, 函数返回true isgraph() 如果参数是除空格之外的打印字符, 函数返回true isprint() 如果参数是打印字符(包括空格), 函数返回true ispunct() 如果参数是标点符号, 函数返回true isspace() 如果参数是标准空白字符, 如空格、换行符、水平或垂直制表符, 函数返回true isxdigit() 如果参数是十六进制数字, 即0~9、a~f、A~F, 函数返回true tolower() 如果参数是大写字符, 返回其小写, 否则返回该参数 toupper() 如果参数是小写字符, 返回其大写, 否则返回该参数
爆肝了3个小时,制作不易,收藏点赞加评论,下次再见!