C++ 复习总结

目录

一、字符串

1.字符串相关的头文件

2.字符串的定义

(1)基本的定义方法

(2)炸爽的定义方法

3.字符串的输入

4.字符串的常用操作

(1)长度 获得字符串长度

(2)删除 字符串中的字符/子串

(3)插入 字符/子串到字符串中

(4)替换 字符串中的字符

(5)转换 字符串和字符数组

(6)查找 所需字符串

(7)提取 某个子字符串

(8)转化 字符

二、数据类型转换

三、用于数学计算的常用函数

(1)计算次幂

※一些令人比较有收获的例题

(1)使用bool类型定义的数组标记已经识别过的字母

题目:



一、字符串

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一样的字典的功能

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值