# leetcode_zhc **Repository Path**: nmgzhc/leetcode_zhc ## Basic Information - **Project Name**: leetcode_zhc - **Description**: 记录自己的刷题过程 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-07 - **Last Updated**: 2023-03-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # leetcode_zhc #### 在Linux下安装C++的基本环境 ```Shell sudo apt-get install gcc // 安装gcc(C编译器) sudo apt-get install g++ // 安装g++(C++编译器) // 安装编译工具 sudo apt-get install make // 安装调试程序 sudo apt-get install gdb // 查看cmake 的版本 cmake --version // 安装cmake wget https://github.com/Kitware/CMake/releases/download/v3.25.2/cmake-3.25.2.tar.gz tar -xvf cmake-3.25.2.tar.gz sudo apt-get install libssl-dev cd cmake-3.25.2 ./bootstrap make -j8 make install cmake --version ``` #### 配置lanuch.json的文件 ```Shell { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) 启动",// 配置名称 "type": "cppdbg",// 配置类型 "request": "launch",// 请求配置类型,launch或者attach "program": "输入程序名称,例如 ${workspaceFolder}/a.out",// 进行调试程序的路径,程序生成文件.out "args": [],// 传递给程序的命令行参数,一般为空 "stopAtEntry": false,// 调试器是否在目标的入口点停止, "cwd": "${workspaceFolder}",// 项目目录 "environment": [], "externalConsole": false,// 调试时是否显示控制台窗口,一般为true显示控制台 "MIMode": "gdb",// 指定连接的调试器 "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] } { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/${fileBasenameNoExtension}.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "preLaunchTask": "build", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] } ``` #### 解决SSH 进入容器没有环境变量 在 /etc/profile中添加以下代码即可 ``` for item in `cat /proc/1/environ |tr '\0' '\n'` do export $item done ``` #### 关于C++调试用的简单用法 **cmake 的Debug 和release模式** ```Shell # 方式1 在cmake过程中显示指定 # Release模式 mkdir Release cd Release cmake -DCMAKE_BUILD_TYPE=Release .. make -j8 # Debug模式 mkdir Debug cd Debug cmake -DCMAKE_BUILD_TYPE=Debug .. make # 方式2 在Cmakelist中进行设置 SET(CMAKE_BUILD_TYPE "Debug") or SET(CMAKE_BUILD_TYPE "Release") ``` gdb对程序的调试过程 ```Shell # 运行等待调试的程序 leetcode_baidu cd bulid/bin gdb leetcode_baidu ## 设置断点 b leetcode_baidu.cc:22 ## 条件断点 b leetcode_baidu.cc:22 if cnt==10 ## 数据断点,当该变量的值发生变化时候,就会触发断点 b &cnt ## 函数断点 当程序执行过程中,执行到某个程序的过程的时候,就会触发该断点。 b funcName ## 监视 监视也被称为硬件断点。可以监测栈变量和堆变量值的变化,当被监测变量值发生变化时,程序被停住。 watch var watch (condition) ## 删(移)除断点 ### 删除一个范围内的断点num1到num5 d num1 - num5 run(简写r): 运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。 continue(简写c):继续执行,到下一个断点处(或运行结束) next(简写n): 单步跟踪程序,当遇到函数调用时,直接调用,不进入此函数体; step(简写s):单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的 until:运行程序直到退出循环体; / until+行号: 运行至某行 finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。 call 函数(参数):调用“函数”,并传递“参数”,如:call gdb_test(55) quit:简记为 q ,退出gdb ``` #### 介绍 记录自己的刷题过程 ### 题库 ```cpp #include using namespace std; int main() { string version1, version2; cin>>version1>>version2; int n1 = version1.size(), n2 = version2.size(); int p1 = 0, p2 = 0; while(p1t2) { cout<<1<n1 && p2>n2) { cout<<0<n1) { cout<<-1<