目录
一、字符串
1.字符串相关的头文件
#include <cstring>
#include <string>
#include <cctype> 用于 isalpha, tolower 等函数
2.字符串的定义
(1)基本的定义方法
-------------------------------------字符串------------------------------------------------
string s; // 初始化一个空字符串
string s = "hello world"; // 用 "hello world" 初始化 s
string s("hello world"); // 作用同上
-------------------------------------字符数组-----------------------------------------------
char s[] = "ROBOT"; //C风格字符数组
char s[6] = {'R', 'O', 'B', 'O', 'T'}; //指定长度的字符串,多余的字符自动被赋为结束字符'\0'
(2)炸爽的定义方法
-------------------------------------字符串-------------------------------------------------
string s1;
string s = s1; // 初始化s2,并用s1初始化
string s(s1); // 作用同上
string s(n,'a'); // 初始化s为:n个a
string s(s1, pos); // 从 s1 的下标 pos 开始的字符拷贝
string s(s1, pos, len); // 从 s1 的下标 pos 开始的 len 个字符的拷贝
string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值
3.字符串的输入
-------------------------------------字符串------------------------------------------------
string s;//对于C++风格字符串
cin >> S; //遇到空格自动终止
getline(cin,s1); //可读入包含空格的字符串
-------------------------------------字符数组-----------------------------------------------
char s[n];
cin.getline(s, n); //可读入包含空格的字符串,可读入的长度为 n-1
cin.getline(s, n, '\n'); //加了限制条件,以'\n'结束输入
for(int i = 0; i<n; i++) //用循环输入
{
cin >> s[i];
}
4.字符串的常用操作
(1)长度 获得字符串长度
-------------------------------------字符串------------------------------------------------
string s = "Hello"
str.size(); //输出结果为5
str.length(); //一样
-------------------------------------字符数组-----------------------------------------------
char s[] = "Hello";
strlen(str); //输出结果为5
(2)删除 字符串中的字符/子串
s.erase(pos, n); //以字符串中下标为pos的字符开始删除(包括自己),向后删除n个
s.erase(pos); //删除字符串中下标为pos以后的所有字符(包括自己)
s.erase(s.begin()+n1,s.end()-n2); //左闭右开,删除字符串中
//s.begin()+n1 到 s.end()+n2 间的子串,注意这里必须用begin和end!
(3)插入 字符/子串到字符串中
\\以下都是旧字符串经过插入操作后得到新字符串
string s2= s1.insert(pos,‘x’);//在s1的第pos个位置插入字符串‘x’
string s2 = s1.insert(pos,n,‘x’);//在str1中第pos个位置插入n个字符‘x’
s1.insert(++s1.begin(),2,‘a’); //通过此操作可以在循环中实现不断的在一个等间隔的位置
//里添加相同的字符串,每次都是先s1.begin()迭代加一,再插入,反复循环
string s2= s1.insert(pos,str1);//在字符串s1第pos个位置插入s1
string s2= s1.insert(pos,“word”,n);//在s1的第pos个位置插入字符串’word’中的n个字符
string s3= s2.insert(pos2,s1,pos1,n);//在s2的第pos2个位置插入s1的从pos1开始的n个字符
(4)替换 字符串中的字符
s1.replace (pos, len, "s1"); //从第pos个位置开始后面的len个字符被替换成了"s1"这个字符串
例子:
//例1
string str("Hello World!");
str.replace(6, 5, "C++");
cout << str; // 输出: Hello C++
//例2
string str("Hello World!");
string new_str("C++");
str.replace(str.begin()+6, str.begin()+11, new_str.begin(), new_str.end());
cout << str; // 输出: Hello C++!
(5)转换 字符串和字符数组
//字符串转换为字符数组
char s2 = s1.c_str();
(6)查找 所需字符串
int index = s1.find("xxx", pos); //从s1的pos位置开始寻找"xxx"字符串,
//返回第一次找到的所需字符串中的第一个字符的位置
例子:
string s1 = "Tom And Jerry, Hello World, Tom !";
// 从 0 位置开始 ( 包括 0 位置 ) , 统计第一次出现 Tom 字符串的位置
int index = s1.find("Tom", 0);
// index: 0
(7)提取 某个子字符串
s1.substr(pos, len); //返回s1中pos这个位置后开始len长度的子字符串(包含pos自己)
例子:
string str = "Hello, World!";
// 提取从位置 7 开始的 5 个字符
string substr1 = str.substr(7, 5); // "World"
// 从位置 2 开始到字符串末尾
string substr2 = str.substr(2); // "llo, World!"
(8)转化 字符
常用:
tolower(c) // 若c是大写字母,转换为小写输出,否则原样输出
toupper(c) // 类似上面的
isalnum(c) // 当是字母或数字时为真
isalpha(c) // 当是字母时为真
isdigit(c) // 当是数字是为真
islower(c) // 当是小写字母时为真
isupper(c) // 当是大写字母时为真
isspace(c) // 当是空白(空格、回车、换行、制表符等)时为真
ispunct(c) // 当是标点符号时为真(即c不是 控制字符、数字、字母、可打印空白 中的一种)
不常用:
isxdigit(c) // 当是16进制数字是为真
isprint(c) // 当时可打印字符时为真(即c是空格或具有可见形式)
isgraph(c) // 当不是空格但可打印时为真
iscntrl(c) // 当是控制字符时为真
(9)比较 字符/字符串
//字符串的下标对应的字符可以直接和字符作比较
s[i] == 'abc'
二、数据类型转换
int n1 = atoi(s2); // 将 字符数组 转化为 整型
int n2 = stoi(s1); // 将 字符串 转化为 整形
string n3 = to_string(s3) // 将 整型 转化为 字符串
s.c_str() //将 字符串 转化为 字符数组
例:
string s1 = "12345";
char s2[] = "12345";
int s3 = 12345;
int n1 = atoi(s2); // 将 字符数组 转化为 整型
int n2 = stoi(s1); // 将 字符串 转化为 整型
string n3 = to_string(s3); // 将 整型 转化为 字符串
cout << n1 << endl;
cout << n2 << endl;
cout << n3 << endl;
三、用于数学计算的常用函数
(1)相关头文件
#include <cmath>
#include <algorithm>
(2)计算次幂
pow(base, exponent)
例:(注意一定要定义为浮点数)
double base = 2.0;
double exponent = 3.0;
double result = pow(base, exponent);
(3)最大值 和 最小值
max(a,b);
min(a,b);
(4)四舍五入
round(c) //c=3.14 round(c)=3
※一些令人比较有收获的例题
(1)使用bool类型定义的数组标记已经识别过的字母
题目:
代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
// 循环处理多组测试数据
while (getline(cin, str))
{
// 假设输入的字符串不为空,因为空字符串不需要处理
// 使用一个标记数组来记录每个字母是否出现过
bool visited[26] = {false}; // 初始化所有字母为未访问
// 处理字符串并输出非重复字母
for (int i = 0; i < str.length(); ++i)
{
// 如果当前字母未被访问过
if (!visited[str[i] - 'a']) // 括号里面的是bool数组里的false,其实就是if(!false)也即if(true),然后执行if里的语句将其标记为true,这样之后再判断的时候若被标记后不为true就不输出了
{
// 标记该字母为已访问
visited[str[i] - 'a'] = true;
// 输出该字母
cout << str[i];
}
}
// 输出换行符,以便分隔每组测试数据的输出
cout << endl;
}
return 0;
}
......待更新
考试寄了;
一点经验教训:以后再也不用数组了,之后学习怎么用vector,因为数组不能删东西;字符串的拼接;冒泡排序;以及学习如何在c++中实现跟python一样的字典的功能