写在前面:
如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持!
第一章 《项目与程序结构》
第二章 《数据类型》
第三章 《运算符》
第四章 《流程控制》
第五章 《Vector向量》
第六章 《String字符串》
第七章 《Array数组》
第八章 《函数》
第九章 《指针》
第十章 《结构体》
在C++中,string是一个标准库类,用于处理字符串,而string字符串可以看做元素为char的vector。因此,vector的基本操作都适用于string。
与vector相同,想使用string就必须插入系统库
。
#include
然后再定义字符串。
string mystring;
唯一不同的是不需要同vector定义时在尖括号中标明类型,其他的初始化方法也完全一样。
#include "test.h"
#include
#include
using namespace std;
void test::Test()
{
string s1;
string s2(3, 'a');
string s3("value");
string s4(s3);
cout << "s1:" << s1 << endl;
cout << "s2:" << s2 << endl;
cout << "s3:" << s3 << endl;
cout << "s4:" << s4 << endl;
}
返回结果如下。
s1:
s2:aaa
s3:value
s4:value
值得注意的是,在定义string前需要预处理将
系统库插入到代码中;另一个则是由于字符串内元素只能是字符,所以重复定义如string s2(3, 'a');
中,a必须由单引号括起来,而不能用双引号。
在系统库
中,除了用于标准输出流的std::cout
对象,还有std::cin
用于标准输入流的对象,通过输入运算符>>
可以读取用户输入的数据,并将其存储在程序中的变量中。而定义字符串时,就可以用到这个方法。
使用test.cpp代码实验。
#include "test.h"
#include
#include
using namespace std;
void test::Test()
{
string s1;
string s2;
cout << "请输入字符串s1:" << endl;
cin >> s1;
cout << "请输入字符串s2:" << endl;
cin >> s2;
cout << "输出s1结果:" << s1 << endl;
cout << "输出s2结果:" << s2 << endl;
}
此时调试整个代码,进入终端。
首先返回结果如下。
请输入字符串s1:
为了实验,此时我们使用键盘在终端中输入55,将55作为元素输入进s1这个字符串中。
输入结果如下。
55
接着,会继续弹出返回结果如下。
请输入字符串s2:
为了实验,此时我们继续使用键盘在终端中输入23,将23作为元素输入进s2这个字符串中。
输入结果如下。
42
此时输出(返回)结果如下。
输出s1结果:55
输出s2结果:23
此时,整个代码运行完毕。所有终端操作如下。
请输入字符串s1:
55
请输入字符串s2:
23
输出s1结果:55
输出s2结果:23
以上的代码使用的cin
仅能对固有个数的输入结果向变量进行导入,如果输入数量不确定,而最后将累计输入内容全部输出,可以使用while循环和for循环进行实现。
#include "test.h"
#include
#include
#include
using namespace std;
void test::Test()
{
vector<string> storage;
string input;
while (cout << "请输入:")
{
cin >> input;
storage.push_back(input);
cout << "输出结果:" << endl;
for (int i = 0; i < storage.size(); i++)
{
cout << storage[i] << " ";
}
cout << endl;
}
}
这里分别定义了两个变量作为容器,一个是向量storage
作为总体储存容器,另一个字符串input
作为临时输入储存容器。
在while循环的判定条件中,并没有实际给出一个布尔表达式作为判定条件,而是输出一个“请输入:”的信息作为引导终端用户输入的循环开始提示;进入while循环,用std::cin
准备将键盘输入的结果导入到input
这个临时输入储存容器中;接着,使用push_back()
把在input
这个临时输入储存容器的输入结果转移到storage
总体储存容器中,再使用for循环来将storage
的内容逐个遍历输出出来。
值得注意的是,这里之所以用vector作为总体储存容器是因为vector可以将临时储存在字符串的内容按字符型变量依次再输入到vector中;而如果使用字符串来承接字符串的结果,就没有办法进行自动类型转换从而使得从临时输入储存容器中的内容转换到总体储存容器里。
终端操作结果如下。
请输入:1
输出结果:
1
请输入:3.25
输出结果:
1 3.25
请输入:char
输出结果:
1 3.25 char
请输入:汉
输出结果:
1 3.25 char 汉
从终端操作结果可以看到,在测试了多个类型的输入后,最后输出结果也都是成为了字符串形式。
String作为字符串,同样可以被比较。其比较规则如下。
String可以用比较运算符<
和>
来比较,也可以使用std::string
类的成员函数std::string::compare
来比较。以下仅使用比较运算符<
和>
进行比较。
使用代码实验,在终端的操作结果如下。
请输入str1:abcde
请输入str2:abcdef
字符串:abcde小于abcdef
请输入str1:abcde
请输入str2:abcdf
字符串:abcde小于abcdf
请输入str1:abcde
请输入str2:abcdE
字符串:abcde大于abcdE
输入各种字符串后,通过比较结果就可以看到,按照从左到右的比较顺序:同长度的字符串ASCII小的字符串小;不同长度的字符串长度短的字符串小;相同字母的字符串小写字母的字符串小。
字符串之间可以互相将内容连接,可以使用加法运算符+
或者std::string
类的成员函数std::string::append
来实现。这里仅介绍使用加法运算符的情况。
使用加法运算符+
来实现的test.cpp代码如下。
#include "test.h"
#include
#include
#include
using namespace std;
void test::Test()
{
string str1 = "哈哈";
string str2 = "55";
string str3 = str1 + str2;
cout << "字符串连接结果为:"<< str3 << endl;
}
返回结果如下。
字符串连接结果为:哈哈55
同Vector容器一样,String字符串在使用时,也提供了许多实用的成员函数来操作和管理字符串(string),以下是常用的std::string
的成员函数。
函数 | 描述 |
---|---|
length() 或size() |
返回字符串的长度 |
empty() |
判断字符串是否为空,返回布尔值 |
clear() |
清空字符串中的内容 |
c_str() |
返回一个以null 结尾的C风格字符串(const char* 类型) |
substr(pos, len) |
返回从位置pos 开始的len 个字符的子字符串 |
find(str) |
在字符串中查找子字符串str 的出现位置,返回首次出现的位置索引;如果找不到则返回std::string::npos |
replace(pos, len, new_str) |
用new_str 替换从位置pos 开始的len 个字符 |
insert(pos, str) |
在指定位置pos 插入字符串str |
erase(pos, len) |
从指定位置pos 开始删除len 个字符 |
push_back(ch) |
在字符串末尾添加字符ch |
pop_back() |
在字符串末尾删除最后一个字符 |
compare(str) |
比较字符串与str 的大小关系,返回一个整数表示结果 |
append(str) |
将一个字符串追加到另一个字符串的末尾 |
ctype.h
是 C 语言标准库中的头文件,其中包含了一些用于字符处理的函数和字符分类宏。这个头文件中定义的函数和宏可以用来对字符进行分类、转换和判断。
字符串可以通过插入这个系统库的内容进行字符处理。
#include
以下是常用的函数和宏。
函数 | 描述 |
---|---|
isalpha(int c) |
判断字符c 是否为字母(a-z 或 A-Z) |
isdigit(int c) |
判断字符c 是否为数字(0-9) |
isalnum(int c) |
判断字符c 是否为字母或数字 |
isupper(int c) |
判断字符c 是否为大写字母(A-Z) |
islower(int c) |
判断字符c 是否为小写字母(a-z) |
isspace(int c) |
判断字符c 是否为空白字符(空格、制表符、换行符等) |
toupper(int c) |
将字符c 转换为大写字母 |
tolower(int c) |
将字符c 转换为小写字母 |
我是EC,一个永远在学习中的探索者,关注我,让我们一起进步!