自己的碎碎念集合

2023-10-16 21:50
文章标签 集合 碎念

本文主要是介绍自己的碎碎念集合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自己的碎碎念集合

  • 2023-09-22 VS程序输出窗口显示运行结果不完整的解决办法
  • 2023-09-11 C语言定义 `int *p,q;` p, q类型是否一样
  • 2023-09-07 c++叠加三目运算符闰年计算法
  • 2023-08-13 一个小题目 A+B problem
    • 一、问题及解答
      • 关碍
    • 总结
  • 2023-07-26 C的2至36进制转换函数
    • 一、itoa()函数的示例代码
    • 总结
  • 2023-07-19 平面坐标下判断三角形以及输出周长和面积
    • 一. 基本知识
    • 总结
  • 2023-06-25 达芬奇去除白背景水印
    • 一、具体步骤
    • 总结
  • 2023-06-20 将Libreoffice PPT 文档转换为txt文字
  • 2023-05-19 C语言非流输入
    • 一、windows平台
    • 二、linux平台
    • 总结
  • 2023-05-11 字符与数组的运用小练习_C语言
    • 一、代码
    • 总结
  • 2023-04-29 C语言二进制读写库
    • 一、代码
    • 总结
  • 2023-04-25 二进制十进制相互转换
    • 一、二进制十进制等相互转换
    • 总结
  • 2023-04-14 lua + C动态库交叉debug
    • 一、前期准备
    • 二、lldb注入进程
    • 总结
  • 2023-04-13 Windows环境下lua输入输出编码转换
    • 一、为lua编写编码转换库
    • 二、lua调用编码转换库demo
    • 总结
  • 2023-04-12 在Windows环境为lua编写模拟键盘库
    • 一、C语言为lua编写库代码
    • 总结
  • 2023-04-04 在C++中使用 int128 类型
    • 一、int128 类型的简单使用
    • 总结
  • 2023-03-28 scanf [A-B] 中[A-B]的意思
  • 2023-03-26 正则表达式的汉字支持
    • 一、解决方案: 宽字符
    • 总结
  • 2023-02-07 C++ constexpr 需要全局或静态才能产生作用
  • 2023-02-03 UE 5.1 第一个游戏难点回顾
    • 一、UE5.1安装
    • 二、开始第一个游戏
      • 1. 学习视频地址
  • 2023-02-02 C语言如何做到让函数知道传入的数据类型
    • 一、gnu扩展宏 __builtin_types_compatible_p
    • 二、使用步骤
    • 总结
  • 2022-12-18 C++模板展开问题
    • C++11的递归模板展开和C++17的逗号表达式展开
    • 总结
  • 2022-11-20 C++小练习, 虚函数求平均值
  • 2022-11-19 C++ 基类, 派生类, 虚函数小练习
    • 题目:
    • 代码:


2023-09-22 VS程序输出窗口显示运行结果不完整的解决办法

看到一个问题, VS循环打印, 只有数十行结果, 搜了一下:
VS程序输出窗口显示运行结果不完整的解决办法

2023-09-11 C语言定义 int *p,q; p, q类型是否一样

这是一种典型的容易引起混淆的问题, int*是一个类型, int是一个类型,

而如此声明, 初学者可能误认为 p,q 都是指针, 但很遗憾, p 是指针, 但 q 不是,

这在clang-tidy中有会有提示:

Multiple declarations in a single statement reduces readability

单个语句中的多个声明会降低可读性, 人为给自己挖坑的典型.

    int *p;int q;

这才是正确的代码规范.

如果非要偷懒, 那只能事先规定类型

    typedef int *intPtr;intPtr r, s;

2023-09-07 c++叠加三目运算符闰年计算法

原文连接:

c++叠加三目运算符怎么看

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{int x;cin>>x;cout<<(x%400==0?"YES":(x%4==0?(x%100!=0?"YES":"NO"):"No"));return 0;
}

2023-08-13 一个小题目 A+B problem

一个小算法问题, 记录一下

一、问题及解答

A+B problem( A+B problem )
描述
小明有一个很大的数字,现在他想要在这个数字中间插入一个+号,来求出这个数的结果,并且他还想知道,这些数中哪个数末尾0最多。
输入
第一行一个整数T(t<=100)表示数据组数
接下来有T行,每行一个数字字符(长度在10^5,最高位不为0)
输出
T行,每行一个整数,表示0最多有多少个

输入
2
2017
44445555

输出
0
3

关碍

条件是数字字符长度在10^5, 内置int类型不可能满足, 意味着可能用到高精度, 但本题不用.

因为只是求末尾0, 意味着算法简单很多.

如果最后一个字符数字是x, 只需在数字串中的其它部分找到的10-x, 如果x为0, 只需找到其它的0的个数即可.

#include <iostream>
#include <string>auto getLastChar(char num) -> char
{char res = static_cast<char>('9' + '1' - num);return (res == '9' + 1) ? '0' : res;
}auto countZero(const std::string &str) -> int
{char chr = getLastChar(str.back());int cnt = 0;for (const auto &i : str){if (i == chr){cnt++;}}return (chr == '5' || chr == '0') ? cnt - 1 : cnt;
}auto main() -> int
{int T = 0;std::cin >> T;std::vector<std::string> vecStr;vecStr.reserve(T);std::string str;for (int i = 0; i != T; ++i){std::cin >> str;vecStr.push_back(str);}for (int i = 0; i != T; ++i){std::cout << countZero(vecStr[i]) << '\n';}return 0;
}

总结

算法不难, 但需要绕个小弯儿.

2023-07-26 C的2至36进制转换函数

有一些C语言初学者学语言的时候比较囫囵吞枣, 最简单的整数转2至36进制函数, 根本没听说过, 还有自己造轮子, 关键还写不对, 其实多看看书, 多查查资料, 有时候可以省很多时间.


一、itoa()函数的示例代码

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>char digStr[64];int main()
{SetConsoleOutputCP(65001);int number = 123456;itoa(number, digStr, 2);printf("数字:%d 转换后的字符串为:%s\n", number, digStr);number = -123456;itoa(number, digStr, 2);printf("数字:%d 转换后的字符串为:%s\n", number, digStr);return 0;
}

总结

代码简单, 函数语义清晰, 简单记录一下.

2023-07-19 平面坐标下判断三角形以及输出周长和面积

平面坐标下判断三角形以及输出周长和面积, 用线性代数的简单知识.


一. 基本知识

在平面坐标, 三个点就是三个向量, 可以通过两个向量同时减去第三个向量, 形成一个顶点在原点的三角形.

三角型
我们发现, 只有一种情况三角形不能成立, 就是从原点出发的两个向量在一条直线上
向量方向一致或相反
我们可以简单的用向量叉乘判断三角型是否成立, 同时, 向量叉乘的结果是向量形成的平行四边形面积
向量叉乘
平行四边形面积的一半就是三角形面积

而三角型的周长, 可以根据勾股定理得出三条边的长度, 相加得出.

以下是代码:

#include <math.h>
#include <stdio.h>// 定义向量结构体
typedef struct
{double x;double y;
} Vector;// 计算向量的差
Vector sub(Vector vecA, Vector vecB)
{return (Vector){vecA.x - vecB.x, vecA.y - vecB.y};
}// 计算向量的叉积
double cross(Vector vecA, Vector vecB)
{return vecA.x * vecB.y - vecA.y * vecB.x;
}// 计算两点之间的距离
double distance(Vector pointA, Vector pointB)
{Vector subAB = sub(pointA, pointB);return sqrt(subAB.x * subAB.x + subAB.y * subAB.y);
}// 计算三角形的周长
double triPer(Vector pointA, Vector pointB, Vector pointC)
{return distance(pointB, pointC) + distance(pointA, pointC) +distance(pointA, pointB);
}// 返回三角形面积, 向量叉积的二分之一的绝对值
double triArea(Vector vecA, Vector vecB, Vector vecC)
{return fabs(cross(sub(vecB, vecA), sub(vecC, vecA))) / 2.0;
}int main()
{Vector pointA;Vector pointB;Vector pointC;scanf("%lf %lf %lf %lf %lf %lf", &pointA.x, &pointA.y, &pointB.x, &pointB.y,&pointC.x, &pointC.y);double rest = triArea(pointA, pointB, pointC);// 判断平面三点是否可构成三角形, 即叉积不为零if (rest){printf("L = %.2lf, A = %.2lf", triPer(pointA, pointB, pointC), rest);}else{printf("Impossible");}return 0;
}

总结

近期在学OpenGL, 顺便学点图形学, 顺便也就学点线性代数, 这就是另外一个世界了.

2023-06-25 达芬奇去除白背景水印

录视频不小心整了个水印, 当时想了几个方法, 重录, ffmpeg命令搞一下, 一张一张幻灯片导成PNG然后一张一张换, 实在是太费劲了.

于是想到这点小玩意达芬奇这么专业的软件一定有办法, 试了试, 还真行


一、具体步骤

  1. 进入调色界面
  2. 将所有片段选中, 鼠标右键, 添加到当前群组
  3. 在节点区域, 选择片段前群组
  4. 在下方的调整区, 选择窗口, 四边形, 调整大小和位置, 将水印覆盖
  5. 调色区选一级校色条, 亮部的亮度拉满, 水印消失

具体步骤


总结

没有用到收费的功能, 但只能用于白底或黑底之上的水印, 不是智能去除.

2023-06-20 将Libreoffice PPT 文档转换为txt文字

有时候需要把ppt的文字内容抓出来, 想了一些办法, 没有成功, 后来发现直接用软件的内置功能即可:

文件: 在浏览器中预览

2023-05-19 C语言非流输入

一个有意思的问题c语言的输入输出问题, 网上很多答案, 总结一下.


一、windows平台

vs需要将getch()更改为_getch()

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>char chrArr[32];int main()
{int i = 0;while ((chrArr[i] = getch()) && (chrArr[i] != '\r')){++i;}char *num;int lhs = strtol(chrArr, &num, 10);int rhs = atoi(num);printf("%d %d %d", lhs, rhs, lhs + rhs);
}

二、linux平台

#include <stdio.h>
#include <stdlib.h>
#include <termio.h>
#include <stdbool.h>int getch(void)
{return getchar();
}void setio(bool bl)
{static struct termios tm, tm_old;if (bl){tcgetattr(0, &tm);tm_old = tm;cfmakeraw(&tm); // 更改终端设置为原始模式,该模式下所有的输入数据以字节为单位被处理tcsetattr(0, TCSANOW, &tm);}else{tcsetattr(0, TCSANOW, &tm_old);}
}char chrArr[32];int main()
{setio(true);int i = 0;while ((chrArr[i] = getch()) && (chrArr[i] != '\r')){++i;}setio(false);char *num;int lhs = strtol(chrArr, &num, 10);int rhs = atoi(num);printf("%d %d %d\n", lhs, rhs, lhs + rhs);
}

总结

vs要用 _getch(), mingw和clang用getch(), linux平台需要自己实现, 这不是标准库中的东西, 所以不可移植…

2023-05-11 字符与数组的运用小练习_C语言

一个问答题: 字符与数组的运用 , 考察知识点: scanf的使用, 字符串数组, 字符在C语言本质是整数, 循环, 分支.


一、代码

一道小题目, 考的知识点包括了C语言输入输出, 字符类的本质, 循环, 分支, 挺好的.

#include <stdio.h>
#include <string.h>char strArr[100][100];void encrypted(char *chr);int main()
{int index = 0;// INT DOUBLE FOR WHILE// RETURNwhile (scanf("%s", strArr[index]) != EOF){for (int i = 0; i != strlen(strArr[index]); i++){encrypted(strArr[index] + i);}index++;}for (int i = 0; i != index; i++){printf("%s\n", strArr[i]);}return 0;
}void encrypted(char *chr)
{switch (*chr){case 'A':*chr = 'N';break;case 'B':*chr = 'O';break;case 'C':*chr = 'P';break;case 'D':*chr = 'Q';break;case 'E':*chr = 'R';break;case 'F':*chr = 'S';break;case 'G':*chr = 'T';break;case 'H':*chr = 'U';break;case 'I':*chr = 'V';break;case 'J':*chr = 'W';break;case 'K':*chr = 'X';break;case 'L':*chr = 'Y';break;case 'M':*chr = 'Z';break;case 'N':*chr = 'A';break;case 'O':*chr = 'B';break;case 'P':*chr = 'C';break;case 'Q':*chr = 'D';break;case 'R':*chr = 'E';break;case 'S':*chr = 'F';break;case 'T':*chr = 'G';break;case 'U':*chr = 'H';break;case 'V':*chr = 'I';break;case 'W':*chr = 'J';break;case 'X':*chr = 'K';break;case 'Y':*chr = 'L';break;case 'Z':*chr = 'M';break;}
}

总结

出这道题的老师挺有水平.


2023-04-29 C语言二进制读写库

压缩算法需要二进制读写库, 根据算法第四版重构C语言版. 可进行逐位读写, 主要用于数据压缩.


一、代码

#ifndef BINSTDIO
#define BINSTDIO#include <assert.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#ifdef _WIN64
#include <fcntl.h>
#include <io.h>
#endif// 读流到缓冲区
void binIO_fillBuffer();// 比特流是否为空
bool binIO_isEmpty();// 读取1位数据并返回一个bool值
bool binIO_readBool(bool *bit);// 读取8位数据并返回一个char值
bool binIO_readChar(unsigned char *chr);// 读取r(1~8)位数据并返回一个char值
bool binIO_readCharBit(unsigned char *chr, int bitSize);// 读取int16值
bool binIO_readShort(uint16_t *num);// 读取r(1~BUFSIZE_X_2)位数据并返回一个int16值
bool binIO_readShortBit(uint16_t *num, int bitSize);// 读取int值
bool binIO_readInt(uint32_t *num);// 读取r(1~32)位数据并返回一个int值
bool binIO_readIntBit(uint32_t *num, int bitSize);// 读取int64
bool binIO_readInt64(uint64_t *num);// 读取r(1~32)位数据并返回一个int值
bool binIO_readInt64Bit(uint64_t *num, int bitSize);// 关闭比特流
void binIO_close();// 恢复流状态
void binIO_clear();// 写入指定的比特
void binIO_writeBool(bool bit);// 写入指定的8位字符
void binIO_writeChar(unsigned char chr);// 写入指定字符的r(1~8)位
void binIO_writeCharBit(unsigned char chr, int bitSize);// 写入int16值
void binIO_writeShort(uint16_t num);// 写入 int16 值, bitSize 在范围 [1, BUFSIZE_X_2]
void binIO_writeShortBit(uint16_t num, int bitSize);// 写入int值
void binIO_writeI

这篇关于自己的碎碎念集合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/221019

相关文章

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

Java基础回顾系列-第六天-Java集合

Java基础回顾系列-第六天-Java集合 集合概述数组的弊端集合框架的优点Java集合关系图集合框架体系图java.util.Collection接口 List集合java.util.List接口java.util.ArrayListjava.util.LinkedListjava.util.Vector Set集合java.util.Set接口java.util.HashSetjava

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储

hutool 集合相关交集、差集

开发过程中会遇到集合之间的对比之类的需求,之前经常会自己写个工具类来实现,目前hutool可以帮助我们解决很多问题,接下来我们就来实践下。 相关jar包 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>RELEASE</version><scope>compile</sco

Java8中的Stream,让集合操作酸爽起来

简介 java8也出来好久了,接口默认方法,lambda表达式,函数式接口,Date API等特性还是有必要去了解一下。比如在项目中经常用到集合,遍历集合可以试下lambda表达式,经常还要对集合进行过滤和排序,Stream就派上用场了。用习惯了,不得不说真的很好用。 Stream作为java8的新特性,基于lambda表达式,是对集合对象功能的增强,它专注于对集合对象进行各种高效、便利的聚合

算法练习小技巧之有序集合--套路详细解析带例题(leetcode)

前言:         本文详细讲解Python中的有序集合SortedList和C++中的有序集合multiset的用法,配合leetcode的例题来展示实际的用处。(本人水平不够,还无法讲解有序集合的实现方法,只会用)         觉得有帮助或者写的不错可以点个赞,后面也有几道我找出来的题目可以用这个方法快速解决的         (感觉有点水) 目录 有序集合用法讲解:

Java中集合类Set、List和Map的区别

Java中的集合包括三大类,它们是Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类。Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap。那么它们有什么区别呢? Set中的对象不按特定方式排序,并且没有重复对象。但它的有些实现类能对集合中的对

复杂SQL集合(不断收集中)

1.一道SQL语句面试题,关于group by 表内容: 2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果, 该如何写sql语句?             胜 负 2005-05-09 2 2 2005-05-10 1 2 --------

EL表达式获取List集合长度

有一次在jsp页面我要获取后台的一个list集合的长度,当然你可以在后台保存长度然后在页面获取,这是一种方法,现在我介绍另一种方法: 首先:我们在jsp页面导入jstl标签库<%@ taglib prefix="fn" uri="http://java.sun.com/jsp.jstl/functions"%> 然后在你要获取的地方写上:${fn:length(qunarRemarkList)