编程错题本

只能最帅的冬冬看!!!


1.变量名写错了:

 

2.进制转换

对应题目:P1143 解法1(位权解法)

解法2(“滚雪球法”)

1. 看到第一位 3

手心里 = 0 × 5 + 3 = 3

2. 看到第二位 4

手心里 = 3 × 5 + 4 = 15 + 4 = 19

  1. 看到第三位 2

    手心里 = 19 × 5 + 2 = 95 + 2 = 97

 

位权法和滚雪球法的对比

方法思路优点
滚雪球法ten = ten * n + a[i]从左到右,边乘边加代码短,效率高
位权法ten += a[i] × n^(len-1-i)先算每位权重,再累加思路直观,符合数学定义

 

3.scanf和printf比cin和cout更快

名言名句:

若代码逻辑无误,却TLE,匹夫可尝试使用scanf和printf代替cin和cout! ——冬冬

Important

scanf和printf比cin和cout更快

题目P1469(这题还考了位运算)

先看答案:

Caution

这个题不要用数组!!!因为开数组[10000000000]会RE!会用80GB内存(是内存,不是磁盘空间!)而且O(n²) 算法会超时,而且不能用cin和cout,因为测试点#1会超时(TLE)

这题考的是位运算!!!异或运算(^)

异或运算 = 让相同的数字互相抵消,最后只留下没有伴的那个。

举个栗子🌰:

 

3.string(字符串)知识点

这里可以说是最薄弱的知识点之一!!!

3.1.定义:
字符串的关键词为string这个其实就相当于是一个char类型的数组,只不过操作调用更方便

定义代码如下:

3.2.使用:
3.2.1输入:

字符串的输入部分是比数组简单的,因为这是一个变量。

3.2.2调用与赋值:

字符串的调用与数组基本相同,都是名称[索引]的结构。赋值的操作也是名称[索引] = '要赋值的内容'

Caution

注意:在赋值时等号右边的内容必须为类型(所以只能赋值一个字符)

这里用循环赋值的结构来写

索引也是与数组相同,从0开始,到长度-1结束。以上代码执行后,字符串变量x将会变为“ddd.....”(字符串+原来有多长就有多少个“d”)

Note

插播一条知识点:

在字符串的使用中unsigned intunsigned long long会比使用intlong long更好。因为它们没有符号位,在处理负数时不会出现数据/索引错误的样子

3.3.字符串函数

string 常用操作与函数速查

  • 字符串拼接:直接使用 ++= 运算符。

  • 字符串比较:可直接用 ==!=<> 等比较运算符。

  • 子串查找与提取

    • s.find("str"):查找子串,找到返回起始索引,否则返回 string::npos

    • s.substr(pos, len):从 pos 开始提取长度为 len 的子串。

  • 字符串修改

    • s.append("str"):在末尾追加字符串。

    • s.insert(pos, "str"):在 pos 位置插入字符串。

    • s.replace(pos, len, "str"):替换从 pos 开始长度为 len 的子串。

    • s.erase(pos, len):删除从 pos 开始长度为 len 的子串。

    • s.push_back(ch) / s.pop_back():在末尾添加或删除一个字符。

  • 状态与清空

    • s.empty():判断字符串是否为空。

    • s.clear():清空整个字符串。

字符处理函数

配合 <cctype> 头文件,可以方便地处理单个字符。这些函数也属于三级考点范围。

大小写转换toupper(c) 将字符转换为大写,tolower(c) 转换为小写。 字符分类判断isupper(c)islower(c) 分别判断是否为大、小写字母;isdigit(c) 判断是否为数字;isalpha(c) 判断是否为字母。

——Deepseek

我再deepseek的基础上再补几个函数:

函数名称用法用处
size()变量名.size()获取变量的长度
length()变量名.length()与size()相同
empty()变量名.empty()获取字符串长度是否为0(在某些情况下比length() == 0更优)