782 lines
52 KiB
HTML
782 lines
52 KiB
HTML
<!DOCTYPE HTML>
|
||
<html lang="en" class="coal" dir="ltr">
|
||
<head>
|
||
<!-- Book generated using mdBook -->
|
||
<meta charset="UTF-8">
|
||
<title>rust common functions - Andrew's Blog</title>
|
||
|
||
|
||
<!-- Custom HTML head -->
|
||
|
||
<meta name="description" content="Andrew Ryan's Blog">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<meta name="theme-color" content="#ffffff">
|
||
|
||
<link rel="icon" href="../../favicon.svg">
|
||
<link rel="shortcut icon" href="../../favicon.png">
|
||
<link rel="stylesheet" href="../../css/variables.css">
|
||
<link rel="stylesheet" href="../../css/general.css">
|
||
<link rel="stylesheet" href="../../css/chrome.css">
|
||
|
||
<!-- Fonts -->
|
||
<link rel="stylesheet" href="../../FontAwesome/css/font-awesome.css">
|
||
<link rel="stylesheet" href="../../fonts/fonts.css">
|
||
|
||
<!-- Highlight.js Stylesheets -->
|
||
<link rel="stylesheet" href="../../highlight.css">
|
||
<link rel="stylesheet" href="../../tomorrow-night.css">
|
||
<link rel="stylesheet" href="../../ayu-highlight.css">
|
||
|
||
<!-- Custom theme stylesheets -->
|
||
<link rel="stylesheet" href="../../src/style/custom.css">
|
||
|
||
<!-- MathJax -->
|
||
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||
</head>
|
||
<body class="sidebar-visible no-js">
|
||
<div id="body-container">
|
||
<!-- Provide site root to javascript -->
|
||
<script>
|
||
var path_to_root = "../../";
|
||
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "coal" : "coal";
|
||
</script>
|
||
|
||
<!-- Work around some values being stored in localStorage wrapped in quotes -->
|
||
<script>
|
||
try {
|
||
var theme = localStorage.getItem('mdbook-theme');
|
||
var sidebar = localStorage.getItem('mdbook-sidebar');
|
||
|
||
if (theme.startsWith('"') && theme.endsWith('"')) {
|
||
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
|
||
}
|
||
|
||
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
|
||
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
|
||
}
|
||
} catch (e) { }
|
||
</script>
|
||
|
||
<!-- Set the theme before any content is loaded, prevents flash -->
|
||
<script>
|
||
var theme;
|
||
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
|
||
if (theme === null || theme === undefined) { theme = default_theme; }
|
||
var html = document.querySelector('html');
|
||
html.classList.remove('coal')
|
||
html.classList.add(theme);
|
||
var body = document.querySelector('body');
|
||
body.classList.remove('no-js')
|
||
body.classList.add('js');
|
||
</script>
|
||
|
||
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
|
||
|
||
<!-- Hide / unhide sidebar before it is displayed -->
|
||
<script>
|
||
var body = document.querySelector('body');
|
||
var sidebar = null;
|
||
var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
|
||
if (document.body.clientWidth >= 1080) {
|
||
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
|
||
sidebar = sidebar || 'visible';
|
||
} else {
|
||
sidebar = 'hidden';
|
||
}
|
||
sidebar_toggle.checked = sidebar === 'visible';
|
||
body.classList.remove('sidebar-visible');
|
||
body.classList.add("sidebar-" + sidebar);
|
||
</script>
|
||
|
||
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
|
||
<div class="sidebar-scrollbox">
|
||
<ol class="chapter"><li class="chapter-item affix "><a href="../../index.html">Andrew's Blog</a></li><li class="chapter-item "><a href="../../posts/linux/linux.html"><strong aria-hidden="true">1.</strong> linux</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/linux/install_linux.html"><strong aria-hidden="true">1.1.</strong> install linux</a></li><li class="chapter-item "><a href="../../posts/linux/bash_profile.html"><strong aria-hidden="true">1.2.</strong> bash profile</a></li><li class="chapter-item "><a href="../../posts/linux/command_list.html"><strong aria-hidden="true">1.3.</strong> command list</a></li><li class="chapter-item "><a href="../../posts/linux/git_guide.html"><strong aria-hidden="true">1.4.</strong> git guide</a></li><li class="chapter-item "><a href="../../posts/linux/tar.html"><strong aria-hidden="true">1.5.</strong> tar</a></li><li class="chapter-item "><a href="../../posts/linux/run_x86_elf_in_x64_setup.html"><strong aria-hidden="true">1.6.</strong> run x86 elf in x64 setup</a></li></ol></li><li class="chapter-item "><a href="../../posts/mac/mac.html"><strong aria-hidden="true">2.</strong> mac</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/mac/macos_profiles.html"><strong aria-hidden="true">2.1.</strong> macos profiles</a></li></ol></li><li class="chapter-item "><a href="../../posts/swift/swift.html"><strong aria-hidden="true">3.</strong> swift</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/swift/learn_swift.html"><strong aria-hidden="true">3.1.</strong> learn swift basics</a></li><li class="chapter-item "><a href="../../posts/swift/swift_extensions.html"><strong aria-hidden="true">3.2.</strong> Swift extensions</a></li><li class="chapter-item "><a href="../../posts/swift/swiftui_extension.html"><strong aria-hidden="true">3.3.</strong> SwiftUI extensions</a></li><li class="chapter-item "><a href="../../posts/swift/install_swift.html"><strong aria-hidden="true">3.4.</strong> install swift</a></li><li class="chapter-item "><a href="../../posts/swift/task_planner.html"><strong aria-hidden="true">3.5.</strong> implment task panner app with SwiftUI</a></li><li class="chapter-item "><a href="../../posts/swift/swift_cheat_sheet.html"><strong aria-hidden="true">3.6.</strong> Swift Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/swift/yinci_url.html"><strong aria-hidden="true">3.7.</strong> Personal privacy protocol</a></li><li class="chapter-item "><a href="../../posts/swift/swift_regular_exressions.html"><strong aria-hidden="true">3.8.</strong> Swift regular exressions</a></li><li class="chapter-item "><a href="../../posts/ios/how_to_create_beautiful_ios_charts_in_swift.html"><strong aria-hidden="true">3.9.</strong> How to Create Beautiful iOS Charts in鑱絊wift</a></li><li class="chapter-item "><a href="../../posts/swift/swiftui_source_code.html"><strong aria-hidden="true">3.10.</strong> SwiftUI source code</a></li><li class="chapter-item "><a href="../../posts/swift/use_swift_fetch_iciba_api.html"><strong aria-hidden="true">3.11.</strong> use swift fetch iciba API</a></li></ol></li><li class="chapter-item "><a href="../../posts/ios/ios.html"><strong aria-hidden="true">4.</strong> ios</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ios/cocaposd_setup_and_install_for_ios_project.html"><strong aria-hidden="true">4.1.</strong> cocaposd setup and install for ios project</a></li><li class="chapter-item "><a href="../../posts/ios/swiftui_show_gif_image.html"><strong aria-hidden="true">4.2.</strong> SwiftUI show gif image</a></li><li class="chapter-item "><a href="../../posts/ios/implement_task_planner_app.html"><strong aria-hidden="true">4.3.</strong> implement Task planner App</a></li></ol></li><li class="chapter-item "><a href="../../posts/objective_c/objective_c.html"><strong aria-hidden="true">5.</strong> objective_c</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/objective_c/objective_c_cheat_sheet.html"><strong aria-hidden="true">5.1.</strong> Objective-C Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/objective_c/objective_c_for_absolute_beginners_read_note.html"><strong aria-hidden="true">5.2.</strong> Objective-C Note</a></li></ol></li><li class="chapter-item "><a href="../../posts/dart/dart.html"><strong aria-hidden="true">6.</strong> dart</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/dart/flutter.html"><strong aria-hidden="true">6.1.</strong> Flutter Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/dart/dart_cheat_sheet.html"><strong aria-hidden="true">6.2.</strong> Dart Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/flutter/flutter_dev_test.html"><strong aria-hidden="true">6.3.</strong> Flutter dev test</a></li></ol></li><li class="chapter-item "><a href="../../posts/rust/rust.html"><strong aria-hidden="true">7.</strong> rust</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/rust/offline_use_rust.html"><strong aria-hidden="true">7.1.</strong> Offline use rust</a></li><li class="chapter-item "><a href="../../posts/rust/rust_grammer.html"><strong aria-hidden="true">7.2.</strong> rust grammar</a></li><li class="chapter-item "><a href="../../posts/rust/pase_string_and_decimal_conversion.html"><strong aria-hidden="true">7.3.</strong> pase string and decimal conversion</a></li><li class="chapter-item "><a href="../../posts/rust/parse_types.html"><strong aria-hidden="true">7.4.</strong> rust types</a></li><li class="chapter-item "><a href="../../posts/rust/rust_life_cycle.html"><strong aria-hidden="true">7.5.</strong> Rust life cycle</a></li><li class="chapter-item "><a href="../../posts/rust/rust_generic.html"><strong aria-hidden="true">7.6.</strong> rust generics</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implment_matrix.html"><strong aria-hidden="true">7.7.</strong> Rust implement matrix</a></li><li class="chapter-item "><a href="../../posts/rust/rust_sort.html"><strong aria-hidden="true">7.8.</strong> Rust implement sort algorithms</a></li><li class="chapter-item "><a href="../../posts/rust/implement_aes_encryption.html"><strong aria-hidden="true">7.9.</strong> Rust implement AEC encryption and decryption</a></li><li class="chapter-item "><a href="../../posts/rust/implement_trie_data_structure.html"><strong aria-hidden="true">7.10.</strong> implement trie data structure</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implement_tree.html"><strong aria-hidden="true">7.11.</strong> implement tree data_structure</a></li><li class="chapter-item "><a href="../../posts/rust/list_dir.html"><strong aria-hidden="true">7.12.</strong> list dir</a></li><li class="chapter-item "><a href="../../posts/rust/fast_way_to_implment_object_trait.html"><strong aria-hidden="true">7.13.</strong> fast way to implment object trait</a></li><li class="chapter-item "><a href="../../posts/rust/compress_rust_binary_size.html"><strong aria-hidden="true">7.14.</strong> compress rust binary size</a></li><li class="chapter-item "><a href="../../posts/rust/implment_file_upload_backend.html"><strong aria-hidden="true">7.15.</strong> impliment file upload</a></li><li class="chapter-item "><a href="../../posts/rust/this_is_add_post_cli_implementation_in_rust.html"><strong aria-hidden="true">7.16.</strong> this is add_post cli implementation in rust</a></li><li class="chapter-item "><a href="../../posts/rust/use_rust_implment_a_copyclipbord_cli.html"><strong aria-hidden="true">7.17.</strong> Use rust implment a copyclipbord CLI</a></li><li class="chapter-item "><a href="../../posts/rust/sqlite_database_add_delete_update_show_in_rust.html"><strong aria-hidden="true">7.18.</strong> sqlite database add delete update show in rust</a></li><li class="chapter-item "><a href="../../posts/rust/implementing_tokio_joinhandle_for_wasm.html"><strong aria-hidden="true">7.19.</strong> Implementing tokio JoinHandle for wasm</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implement_a_crate_for_encode_and_decode_brainfuck_and_ook.html"><strong aria-hidden="true">7.20.</strong> rust implement a crate for encode and decode brainfuck and ook</a></li><li class="chapter-item "><a href="../../posts/rust/slint_builtin_elements.html"><strong aria-hidden="true">7.21.</strong> Slint Builtin Elements</a></li><li class="chapter-item "><a href="../../posts/rust/corporate_network_install_rust_on_windows.html"><strong aria-hidden="true">7.22.</strong> Corporate network install Rust on windows</a></li><li class="chapter-item "><a href="../../posts/rust/rust_binary_file_how_to_judge_static_link_or_dynamic_link_in_macos.html"><strong aria-hidden="true">7.23.</strong> rust binary file how to judge static link or dynamic link in Macos</a></li><li class="chapter-item "><a href="../../posts/rust/rust_binary_include_dir_and_get_contents.html"><strong aria-hidden="true">7.24.</strong> rust binary include dir and get contents</a></li><li class="chapter-item "><a href="../../posts/rust/rust_logger_non-block.html"><strong aria-hidden="true">7.25.</strong> rust logger non-block</a></li><li class="chapter-item "><a href="../../posts/rust/rust_connect_sql_server_database.html"><strong aria-hidden="true">7.26.</strong> rust connect sql server database</a></li><li class="chapter-item "><a href="../../posts/rust/rust_websocket_implment.html"><strong aria-hidden="true">7.27.</strong> rust websocket implment</a></li></ol></li><li class="chapter-item "><a href="../../posts/java/java.html"><strong aria-hidden="true">8.</strong> java</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/java/java_grammar.html"><strong aria-hidden="true">8.1.</strong> java grammar and codewar</a></li><li class="chapter-item "><a href="../../posts/java/run_jar.html"><strong aria-hidden="true">8.2.</strong> java run .jar</a></li><li class="chapter-item "><a href="../../posts/java/java_pomxml_add_defaultgoal_to_build.html"><strong aria-hidden="true">8.3.</strong> Java pomxml add defaultGoal to build</a></li><li class="chapter-item "><a href="../../posts/java/java_set_mvn_mirror.html"><strong aria-hidden="true">8.4.</strong> Java set mvn mirror</a></li></ol></li><li class="chapter-item "><a href="../../posts/python/python.html"><strong aria-hidden="true">9.</strong> python</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/python/convert_pesn.html"><strong aria-hidden="true">9.1.</strong> convert pesn</a></li><li class="chapter-item "><a href="../../posts/python/find_remove_dir.html"><strong aria-hidden="true">9.2.</strong> find and remove dir</a></li><li class="chapter-item "><a href="../../posts/python/timing_message.html"><strong aria-hidden="true">9.3.</strong> wechat send message</a></li><li class="chapter-item "><a href="../../posts/python/use_python_openpyxl_package_read_and_edit_excel_files.html"><strong aria-hidden="true">9.4.</strong> Use python openpyxl package read and edit excel files</a></li></ol></li><li class="chapter-item "><a href="../../posts/go/go.html"><strong aria-hidden="true">10.</strong> go</a></li><li class="chapter-item "><a href="../../posts/js/js.html"><strong aria-hidden="true">11.</strong> js</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/js/js_tutorial.html"><strong aria-hidden="true">11.1.</strong> js tutorial</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_map.html"><strong aria-hidden="true">11.2.</strong> ja map</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_math.html"><strong aria-hidden="true">11.3.</strong> js math</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_object.html"><strong aria-hidden="true">11.4.</strong> js object</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_set.html"><strong aria-hidden="true">11.5.</strong> js set</a></li><li class="chapter-item "><a href="../../posts/js/single_thread_and_asynchronous.html"><strong aria-hidden="true">11.6.</strong> single thread and asynchronous</a></li><li class="chapter-item "><a href="../../posts/js/this.html"><strong aria-hidden="true">11.7.</strong> js this</a></li><li class="chapter-item "><a href="../../posts/js/js_implment_aes.html"><strong aria-hidden="true">11.8.</strong> js implment aes</a></li><li class="chapter-item "><a href="../../posts/js/getting_started_with_ajax.html"><strong aria-hidden="true">11.9.</strong> getting started with ajax</a></li><li class="chapter-item "><a href="../../posts/js/BinarySearchTree.html"><strong aria-hidden="true">11.10.</strong> binary search tree</a></li><li class="chapter-item "><a href="../../posts/js/goole_zx.html"><strong aria-hidden="true">11.11.</strong> goole zx</a></li><li class="chapter-item "><a href="../../posts/js/es6.html"><strong aria-hidden="true">11.12.</strong> es6</a></li></ol></li><li class="chapter-item "><a href="../../posts/ruby/ruby.html"><strong aria-hidden="true">12.</strong> ruby</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ruby/rails_setup_env.html"><strong aria-hidden="true">12.1.</strong> ruby on rails setup environment</a></li><li class="chapter-item "><a href="../../posts/ruby/learn_ruby.html"><strong aria-hidden="true">12.2.</strong> learn ruby</a></li><li class="chapter-item "><a href="../../posts/ruby/ruby_note.html"><strong aria-hidden="true">12.3.</strong> Ruby Note</a></li><li class="chapter-item "><a href="../../posts/ruby/setup_ruby_for_ctf.html"><strong aria-hidden="true">12.4.</strong> Setup ruby for CTF</a></li></ol></li><li class="chapter-item "><a href="../../posts/react/react.html"><strong aria-hidden="true">13.</strong> react</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/react/react_life_cycle.html"><strong aria-hidden="true">13.1.</strong> react life cycle</a></li><li class="chapter-item "><a href="../../posts/react/react_router.html"><strong aria-hidden="true">13.2.</strong> react router</a></li><li class="chapter-item "><a href="../../posts/react/react_this.html"><strong aria-hidden="true">13.3.</strong> react this</a></li><li class="chapter-item "><a href="../../posts/react/react_interviw.html"><strong aria-hidden="true">13.4.</strong> react interview</a></li><li class="chapter-item "><a href="../../posts/react/important_react_interview.html"><strong aria-hidden="true">13.5.</strong> important react interview</a></li><li class="chapter-item "><a href="../../posts/react/react_quick_reference.html"><strong aria-hidden="true">13.6.</strong> react quick reference</a></li><li class="chapter-item "><a href="../../posts/react/redux_quick_reference.html"><strong aria-hidden="true">13.7.</strong> redux quick reference</a></li></ol></li><li class="chapter-item "><a href="../../posts/vue/vue.html"><strong aria-hidden="true">14.</strong> vue</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/vue/vue_ajax.html"><strong aria-hidden="true">14.1.</strong> vue ajax</a></li></ol></li><li class="chapter-item "><a href="../../posts/angular/angular.html"><strong aria-hidden="true">15.</strong> angular</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/angular/controller_communication.html"><strong aria-hidden="true">15.1.</strong> controller communication</a></li><li class="chapter-item "><a href="../../posts/angular/creating_custom_directives.html"><strong aria-hidden="true">15.2.</strong> creating custom directives</a></li><li class="chapter-item "><a href="../../posts/angular/directive_notes.html"><strong aria-hidden="true">15.3.</strong> directive notes</a></li><li class="chapter-item "><a href="../../posts/angular/directive_communication.html"><strong aria-hidden="true">15.4.</strong> directive communication</a></li><li class="chapter-item "><a href="../../posts/angular/post_params.html"><strong aria-hidden="true">15.5.</strong> post params</a></li><li class="chapter-item "><a href="../../posts/angular/read_json_angular.html"><strong aria-hidden="true">15.6.</strong> read json angular</a></li><li class="chapter-item "><a href="../../posts/angular/same_route_reload.html"><strong aria-hidden="true">15.7.</strong> same route reload</a></li></ol></li><li class="chapter-item "><a href="../../posts/css/css.html"><strong aria-hidden="true">16.</strong> css</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/css/use_css_media.html"><strong aria-hidden="true">16.1.</strong> use css media</a></li></ol></li><li class="chapter-item "><a href="../../posts/php/php.html"><strong aria-hidden="true">17.</strong> php</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/php/for_php_string_implment_some_extemtion_functions.html"><strong aria-hidden="true">17.1.</strong> for php string implment some extemtion functions</a></li><li class="chapter-item "><a href="../../posts/php/php_cheatsheet.html"><strong aria-hidden="true">17.2.</strong> PHP cheatsheet</a></li></ol></li><li class="chapter-item expanded "><a href="../../posts/leetcode/leetcode.html"><strong aria-hidden="true">18.</strong> leetcode</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/leetcode/rust_leetcode.html"><strong aria-hidden="true">18.1.</strong> rust leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/rust_codewar.html"><strong aria-hidden="true">18.2.</strong> rust codewar</a></li><li class="chapter-item "><a href="../../posts/leetcode/swift_codewar.html"><strong aria-hidden="true">18.3.</strong> swift codewar</a></li><li class="chapter-item "><a href="../../posts/leetcode/js_leetcode.html"><strong aria-hidden="true">18.4.</strong> js leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/java_leetcode.html"><strong aria-hidden="true">18.5.</strong> java leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/rust_huawei.html"><strong aria-hidden="true">18.6.</strong> huawei test</a></li><li class="chapter-item expanded "><a href="../../posts/leetcode/rust_utils.html" class="active"><strong aria-hidden="true">18.7.</strong> rust common functions</a></li><li class="chapter-item "><a href="../../posts/leetcode/olympiad_training.html"><strong aria-hidden="true">18.8.</strong> Computer olympiad training</a></li></ol></li><li class="chapter-item "><a href="../../posts/ctf/CTF.html"><strong aria-hidden="true">19.</strong> ctf</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ctf/CTF_Note.html"><strong aria-hidden="true">19.1.</strong> CTF Note</a></li><li class="chapter-item "><a href="../../posts/ctf/0.1_Web.html"><strong aria-hidden="true">19.2.</strong> Web</a></li><li class="chapter-item "><a href="../../posts/ctf/4.1_Misc.html"><strong aria-hidden="true">19.3.</strong> Misc</a></li><li class="chapter-item "><a href="../../posts/ctf/3.2_PWN_note.html"><strong aria-hidden="true">19.4.</strong> PWN</a></li><li class="chapter-item "><a href="../../posts/ctf/3.1_Crypto.html"><strong aria-hidden="true">19.5.</strong> Crypto</a></li><li class="chapter-item "><a href="../../posts/ctf/3.4_RSA_note.html"><strong aria-hidden="true">19.6.</strong> Rsa attack</a></li><li class="chapter-item "><a href="../../posts/ctf/3.5_Base64.html"><strong aria-hidden="true">19.7.</strong> Base64</a></li><li class="chapter-item "><a href="../../posts/ctf/0.0_SQL Injection Cheatsheet.html"><strong aria-hidden="true">19.8.</strong> SQL Injection Cheatsheet</a></li><li class="chapter-item "><a href="../../posts/ctf/1.1_SQL_injection.html"><strong aria-hidden="true">19.9.</strong> SQL Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.2_SQL_injection_UNION_attacks.html"><strong aria-hidden="true">19.10.</strong> SQL Injection UNION attacks</a></li><li class="chapter-item "><a href="../../posts/ctf/1.3_Blind SQL injection.html"><strong aria-hidden="true">19.11.</strong> Blind SQL Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.4_Code Injection.html"><strong aria-hidden="true">19.12.</strong> Code Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.5_SSRF.html"><strong aria-hidden="true">19.13.</strong> SSRF</a></li><li class="chapter-item "><a href="../../posts/ctf/1.6_OS command injection.html"><strong aria-hidden="true">19.14.</strong> OS command injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.7_Local file inclusion.html"><strong aria-hidden="true">19.15.</strong> Local file inclusion</a></li><li class="chapter-item "><a href="../../posts/ctf/1.8_Remote file inclusion.html"><strong aria-hidden="true">19.16.</strong> Remote file inclusion</a></li><li class="chapter-item "><a href="../../posts/ctf/1.9_CSRFm.html"><strong aria-hidden="true">19.17.</strong> CSRF</a></li><li class="chapter-item "><a href="../../posts/ctf/1.10_NoSQL injection.html"><strong aria-hidden="true">19.18.</strong> NoSQL injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.11_JSON injection.html"><strong aria-hidden="true">19.19.</strong> JSON injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.12_CTF_Web_SQL_Note.html"><strong aria-hidden="true">19.20.</strong> CTF Web SQL Note</a></li><li class="chapter-item "><a href="../../posts/ctf/2.1_XXE.html"><strong aria-hidden="true">19.21.</strong> XXE</a></li><li class="chapter-item "><a href="../../posts/ctf/2.2_XSS.html"><strong aria-hidden="true">19.22.</strong> XSS</a></li><li class="chapter-item "><a href="../../posts/ctf/2.3_Upload File.html"><strong aria-hidden="true">19.23.</strong> Upload File</a></li><li class="chapter-item "><a href="../../posts/ctf/2.4_serialize_unserialize.html"><strong aria-hidden="true">19.24.</strong> serialize unserialize</a></li><li class="chapter-item "><a href="../../posts/ctf/2.5_Race condition.html"><strong aria-hidden="true">19.25.</strong> Race condition</a></li><li class="chapter-item "><a href="../../posts/ctf/3.2_PWN_note.html"><strong aria-hidden="true">19.26.</strong> PWN_note</a></li><li class="chapter-item "><a href="../../posts/ctf/3.3_pwn HCTF2016 brop.html"><strong aria-hidden="true">19.27.</strong> pwn HCTF2016 brop</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_patch_defense_skill.html"><strong aria-hidden="true">19.28.</strong> PWN Patch defense skill</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_stack_overflow.html"><strong aria-hidden="true">19.29.</strong> PWN stack overflow</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_heap_overflow.html"><strong aria-hidden="true">19.30.</strong> PWN heap overflow</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_format_string_vulnerability.html"><strong aria-hidden="true">19.31.</strong> PWN Format String Vulnerability</a></li><li class="chapter-item "><a href="../../posts/ctf/kali_linux_tutorials.html"><strong aria-hidden="true">19.32.</strong> Kali linux tutorials</a></li><li class="chapter-item "><a href="../../posts/ctf/google_dorks_2023_lists.html"><strong aria-hidden="true">19.33.</strong> Google Dorks 2023 Lists</a></li><li class="chapter-item "><a href="../../posts/ctf/dvwa_writeup.html"><strong aria-hidden="true">19.34.</strong> DVWA WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/bwapp_writeup.html"><strong aria-hidden="true">19.35.</strong> bWAPP WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/sqlilabs_writeup.html"><strong aria-hidden="true">19.36.</strong> sqlilabs WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/ctf_train_at_hangzhou.html"><strong aria-hidden="true">19.37.</strong> ctf train at hangzhou</a></li><li class="chapter-item "><a href="../../posts/ctf/ctf_common_mindmap_list.html"><strong aria-hidden="true">19.38.</strong> ctf common mindmap list</a></li><li class="chapter-item "><a href="../../posts/ctf/error_based_sql_injection.html"><strong aria-hidden="true">19.39.</strong> Error Based SQL Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/urlfinder_tutorial.html"><strong aria-hidden="true">19.40.</strong> URLFinder Tutorial</a></li><li class="chapter-item "><a href="../../posts/ctf/observer_ward_tutorial.html"><strong aria-hidden="true">19.41.</strong> observer_ward Tutorial</a></li><li class="chapter-item "><a href="../../posts/ctf/mysql_udf_.html"><strong aria-hidden="true">19.42.</strong> MySQL UDF 提权</a></li><li class="chapter-item "><a href="../../posts/ctf/nuclei__tutorial.html"><strong aria-hidden="true">19.43.</strong> Nuclei Tutorial</a></li><li class="chapter-item "><a href="../../posts/ctf/2024_ctf_solution_thinking.html"><strong aria-hidden="true">19.44.</strong> 2024 ctf solution thinking</a></li><li class="chapter-item "><a href="../../posts/ctf/man_che_si_te_bian_ma.html"><strong aria-hidden="true">19.45.</strong> 曼彻斯特编码</a></li></ol></li></ol>
|
||
</div>
|
||
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
|
||
<div class="sidebar-resize-indicator"></div>
|
||
</div>
|
||
</nav>
|
||
|
||
<!-- Track and set sidebar scroll position -->
|
||
<script>
|
||
var sidebarScrollbox = document.querySelector('#sidebar .sidebar-scrollbox');
|
||
sidebarScrollbox.addEventListener('click', function(e) {
|
||
if (e.target.tagName === 'A') {
|
||
sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop);
|
||
}
|
||
}, { passive: true });
|
||
var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll');
|
||
sessionStorage.removeItem('sidebar-scroll');
|
||
if (sidebarScrollTop) {
|
||
// preserve sidebar scroll position when navigating via links within sidebar
|
||
sidebarScrollbox.scrollTop = sidebarScrollTop;
|
||
} else {
|
||
// scroll sidebar to current active section when navigating via "next/previous chapter" buttons
|
||
var activeSection = document.querySelector('#sidebar .active');
|
||
if (activeSection) {
|
||
activeSection.scrollIntoView({ block: 'center' });
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<div id="page-wrapper" class="page-wrapper">
|
||
|
||
<div class="page">
|
||
<div id="menu-bar-hover-placeholder"></div>
|
||
<div id="menu-bar" class="menu-bar sticky">
|
||
<div class="left-buttons">
|
||
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
|
||
<i class="fa fa-bars"></i>
|
||
</label>
|
||
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
|
||
<i class="fa fa-paint-brush"></i>
|
||
</button>
|
||
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
|
||
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
|
||
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
|
||
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
|
||
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
|
||
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
|
||
</ul>
|
||
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
|
||
<i class="fa fa-search"></i>
|
||
</button>
|
||
</div>
|
||
|
||
<h1 class="menu-title">Andrew's Blog</h1>
|
||
|
||
<div class="right-buttons">
|
||
<a href="https://gitlink.org.cn/dnrops/dnrops.gitlink.net.git" title="Git repository" aria-label="Git repository">
|
||
<i id="git-repository-button" class="fa fa-github"></i>
|
||
</a>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div id="search-wrapper" class="hidden">
|
||
<form id="searchbar-outer" class="searchbar-outer">
|
||
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
|
||
</form>
|
||
<div id="searchresults-outer" class="searchresults-outer hidden">
|
||
<div id="searchresults-header" class="searchresults-header"></div>
|
||
<ul id="searchresults">
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
|
||
<script>
|
||
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
|
||
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
|
||
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
|
||
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
|
||
});
|
||
</script>
|
||
|
||
<div id="content" class="content">
|
||
<main>
|
||
<h1 id="common-functions-implementation"><a class="header" href="#common-functions-implementation">Common functions implementation</a></h1>
|
||
<h2 id="substring"><a class="header" href="#substring">substring</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
|
||
</span><span class="boring">fn main() {
|
||
</span>pub fn sub_string(s: String, start: usize, end: usize) -> String {
|
||
s.get(start..=end).unwrap().to_string()
|
||
}
|
||
<span class="boring">}</span></code></pre></pre>
|
||
<h2 id="convert-hexadecimal-to-decimal"><a class="header" href="#convert-hexadecimal-to-decimal">convert hexadecimal to decimal</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust">/*
|
||
十六进制转换为十进制
|
||
*/
|
||
fn hexadecimal_to_decimal(h: &str) -> i32 {
|
||
let mut result = 0;
|
||
for c in h.get(2..).unwrap().to_string().chars() {
|
||
match c.to_digit(16) {
|
||
Some(d) => result = result * 16 + d as i32,
|
||
None => return -1,
|
||
}
|
||
}
|
||
result
|
||
}
|
||
fn main(){
|
||
let re = hexadecimal_to_decimal("0xA0");
|
||
println!("{}", re);//160
|
||
}</code></pre></pre>
|
||
<h2 id="parse-string-to-i32"><a class="header" href="#parse-string-to-i32">parse string to i32</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust">fn parse_to_int(b: &str) -> Option<i32> {
|
||
if b.len() == 0 {
|
||
return None;
|
||
}
|
||
let mut res = 0;
|
||
for c in b.chars() {
|
||
res *= 10;
|
||
res += c as i32 - 48;
|
||
}
|
||
return Some(res);
|
||
}
|
||
fn main(){
|
||
let re = parse_to_int("1014565115");
|
||
println!("{:?}", re);
|
||
}</code></pre></pre>
|
||
<h2 id="binary-to-decimal"><a class="header" href="#binary-to-decimal">binary to decimal</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust">/*
|
||
二进制转换为十进制
|
||
*/
|
||
fn binary_to_decimal(num: &str) -> Option<i64> {
|
||
if num.len() == 0 {
|
||
return None;
|
||
}
|
||
let mut sum = 0;
|
||
let vec = num
|
||
.chars()
|
||
.map(|x| i64::from(x.to_digit(10).unwrap()))
|
||
.collect::<Vec<i64>>();
|
||
for (index, item) in vec.iter().rev().enumerate() {
|
||
sum += i64::pow(2, index as u32) * item;
|
||
}
|
||
Some(sum)
|
||
}
|
||
fn main(){
|
||
let re = binary_to_decimal("101");
|
||
println!("{:?}", re);
|
||
}</code></pre></pre>
|
||
<h2 id="all-prime-factors"><a class="header" href="#all-prime-factors">all prime factors</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust">/*
|
||
数的所有质数因子
|
||
*/
|
||
fn all_prime_factors(n: usize) -> Vec<usize> {
|
||
let mut n = n as usize;
|
||
let mut factors: Vec<usize> = vec![];
|
||
for i in 2..n * n {
|
||
while n % i == 0 {
|
||
factors.push(i);
|
||
n /= i;
|
||
}
|
||
}
|
||
factors
|
||
}
|
||
fn main(){
|
||
let re = all_prime_factors(40);
|
||
println!("{:?}", re); //[2,2,2,5]
|
||
}</code></pre></pre>
|
||
<h2 id="round"><a class="header" href="#round">round</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust">/*
|
||
四舍五入
|
||
*/
|
||
fn round(f: f64) -> i64 {
|
||
(f + 0.5).floor() as i64
|
||
}
|
||
fn main() {
|
||
let re = round(10.4);
|
||
assert_eq!(10, re);
|
||
}</code></pre></pre>
|
||
<h2 id="input-from-terminal"><a class="header" href="#input-from-terminal">input from terminal</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust">pub fn input_string() -> String {
|
||
let mut input = String::new();
|
||
std::io::stdin().read_line(&mut input).unwrap();
|
||
input.trim().to_string()
|
||
}
|
||
pub fn input_num<T>() -> T
|
||
where
|
||
<T as std::str::FromStr>::Err: std::fmt::Debug,
|
||
T: std::str::FromStr,
|
||
{
|
||
let mut input = String::new();
|
||
std::io::stdin().read_line(&mut input).unwrap();
|
||
input.trim().to_string().parse::<T>().unwrap()
|
||
}
|
||
pub fn input_vec_string(split_by: &str) -> Vec<String> {
|
||
let mut input = String::new();
|
||
std::io::stdin().read_line(&mut input).unwrap();
|
||
input
|
||
.trim()
|
||
.split(split_by)
|
||
.filter(|s| !s.is_empty())
|
||
.map(|s| s.trim().to_string())
|
||
.map(|s| s.to_string())
|
||
.collect::<Vec<String>>()
|
||
}
|
||
pub fn input_vec_num<T>(split_by: &str) -> Vec<T>
|
||
where
|
||
<T as std::str::FromStr>::Err: std::fmt::Debug,
|
||
T: std::str::FromStr,
|
||
{
|
||
let mut input = String::new();
|
||
std::io::stdin().read_line(&mut input).unwrap();
|
||
input
|
||
.trim()
|
||
.split(split_by)
|
||
.filter(|s| !s.is_empty())
|
||
.map(|s| s.trim().to_string())
|
||
.map(|s| s.parse::<T>().unwrap())
|
||
.collect::<Vec<T>>()
|
||
}
|
||
fn input_loop() -> std::io::Lines<std::io::StdinLock<'static>> {
|
||
use std::io::{self, *};
|
||
let stdin = io::stdin();
|
||
stdin.lock().lines()
|
||
}
|
||
fn main() {
|
||
for line in input_loop() {
|
||
println!("{}", line.unwrap());
|
||
}
|
||
}</code></pre></pre>
|
||
<h2 id="padding和对齐"><a class="header" href="#padding和对齐">padding和对齐</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
|
||
</span><span class="boring">fn main() {
|
||
</span>// 右对齐,不足左边补空格
|
||
println!("|{:6}|", 21);//| 21|
|
||
println!("|{:>6}|", 21);//| 21|
|
||
// 右对齐,不足左边补0
|
||
println!("{:06}", 21);//000021
|
||
println!("{:>06}", 21);//000021
|
||
println!("{:0>6}", 21);//000021
|
||
// 右对齐,左边补-
|
||
println!("{:->6}", 21);//----21
|
||
// 居中对齐
|
||
println!("|{:^6}|", 21);//| 21 |
|
||
// 左对齐,右边补-
|
||
println!("|{:-<6}|", 21);//|21----|
|
||
<span class="boring">}</span></code></pre></pre>
|
||
<h2 id="数组去重"><a class="header" href="#数组去重">数组去重</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
|
||
</span><span class="boring">fn main() {
|
||
</span>pub fn huawei_2016_17() {
|
||
let s = vec![1, 0, 1, 0, 0, 0, 1];
|
||
fn remove_repeat(v: Vec<i32>) -> Vec<i32> {
|
||
let mut res = vec![];
|
||
for i in 0..v.len() {
|
||
if res.contains(&v[i]) {
|
||
continue;
|
||
} else {
|
||
res.push(v[i]);
|
||
}
|
||
}
|
||
res
|
||
}
|
||
let res = remove_repeat(s);
|
||
println!("{:?}", res);//[1,0]
|
||
}
|
||
<span class="boring">}</span></code></pre></pre>
|
||
<h2 id="vertor-中的邻居"><a class="header" href="#vertor-中的邻居">vertor 中的邻居</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
|
||
</span><span class="boring">fn main() {
|
||
</span>pub fn huawei_2016_18() {
|
||
let v = Vec::from("zankxnsk1515-5151xsx45");
|
||
let digits = v
|
||
.iter()
|
||
.enumerate()
|
||
.filter(|(i, c)| (**c as char).is_digit(10))
|
||
.map(|(i, c)| (i, *c, *c as char))
|
||
.collect::<Vec<_>>();
|
||
println!("{:?}", digits);
|
||
let mut d_iter = digits.iter();
|
||
let mut v = vec![];
|
||
while let Some(d) = d_iter.next() {
|
||
if let Some(d1) = d_iter.next() {
|
||
v.push([d.2, d1.2]);
|
||
}
|
||
}
|
||
// [['1', '5'], ['1', '5'], ['5', '1'], ['5', '1'], ['4', '5']]
|
||
println!("{:?}", v);
|
||
}
|
||
<span class="boring">}</span></code></pre></pre>
|
||
<h2 id="排序的vec去重-并return重复的元素数量"><a class="header" href="#排序的vec去重-并return重复的元素数量">排序的Vec去重 并return重复的元素数量</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust">fn remove_duplicates_from_sorted_vec(nums: Vec<i32>) -> usize {
|
||
if nums.len() < 1 {
|
||
return 0;
|
||
};
|
||
let n = nums.len();
|
||
let mut nums = nums.clone();
|
||
let mut j = 0;
|
||
for i in 0..n {
|
||
if nums[j] != nums[i] {
|
||
j += 1;
|
||
nums[j] = nums[i];
|
||
}
|
||
}
|
||
let (unique, duplicate) = nums.split_at(j + 1);
|
||
println!("{:?}", unique); // unique vec
|
||
println!("{:?}", duplicate); // duplicate vec
|
||
// [0, 1, 2, 3, 4]
|
||
// [2, 2, 3, 3, 4]
|
||
// 5
|
||
return j + 1; //重复的元素数
|
||
}
|
||
fn main() {
|
||
let res = remove_duplicates_from_sorted_vec(vec![0, 0, 1, 1, 1, 2, 2, 3, 3, 4]);
|
||
println!("{}", res);
|
||
}</code></pre></pre>
|
||
<h2 id="判断链表是否有环"><a class="header" href="#判断链表是否有环">判断链表是否有环</a></h2>
|
||
<pre><code class="language-java">public boolean hasCycle(ListNode head) {
|
||
if (head == null || head.next == null) {
|
||
return false;
|
||
}
|
||
ListNode slow = head;
|
||
ListNode fast = head.next;
|
||
while (slow != fast) {
|
||
if (fast == null || fast.next == null) {
|
||
return false;
|
||
}
|
||
slow = slow.next;
|
||
fast = fast.next.next;
|
||
}
|
||
return true;
|
||
}
|
||
</code></pre>
|
||
<h1 id="字符串中找出数字--find-all-digit-in-string"><a class="header" href="#字符串中找出数字--find-all-digit-in-string">字符串中找出数字 find all digit in string</a></h1>
|
||
<pre><pre class="playground"><code class="language-rust">pub fn findall_digit(s: &str) -> Vec<i64> {
|
||
let mut s = s.chars().collect::<Vec<_>>();
|
||
let ss = s.clone();
|
||
for (i, c) in ss.iter().enumerate() {
|
||
if !c.is_digit(10) && i < ss.len() {
|
||
s[i] = ' ';
|
||
}
|
||
}
|
||
let s_digit = s.iter().map(|s| s.to_string()).collect::<Vec<_>>().join("");
|
||
s_digit
|
||
.split(" ")
|
||
.filter(|s| !s.is_empty())
|
||
.map(|s| s.trim().to_string())
|
||
.map(|s| s.parse::<i64>().unwrap())
|
||
.collect::<Vec<i64>>()
|
||
}
|
||
fn main(){
|
||
let res = findall_digit("xsxsx54xsxs45x4sx");
|
||
println!("{:?}", res); //[54, 45, 4]
|
||
}</code></pre></pre>
|
||
<h2 id="string-全排列-full-arrangement"><a class="header" href="#string-全排列-full-arrangement">String 全排列 (full arrangement)</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
|
||
</span><span class="boring">fn main() {
|
||
</span>fn full_arrangement(s: String) -> Vec<String> {
|
||
let s_string = s.to_string();
|
||
let mut out_vec = Vec::new();
|
||
for i in 0..s.len() + 1 {
|
||
for j in i + 1..s.len() + 1 {
|
||
out_vec.push(s_string.get(i..j).unwrap().to_string());
|
||
}
|
||
}
|
||
out_vec
|
||
}
|
||
println!("{:?}", full_arrangement("123".to_string())); //["1", "12", "123", "2", "23", "3"]
|
||
<span class="boring">}</span></code></pre></pre>
|
||
<h2 id="vec-全排列-full-arrangement"><a class="header" href="#vec-全排列-full-arrangement">Vec 全排列 (full arrangement)</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
|
||
</span><span class="boring">fn main() {
|
||
</span>fn full_arrangement(s: Vec<i32>) -> Vec<Vec<i32>> {
|
||
let mut out_vec = Vec::new();
|
||
for i in 0..s.len() + 1 {
|
||
for j in i + 1..s.len() + 1 {
|
||
out_vec.push(s.get(i..j).unwrap().to_owned());
|
||
}
|
||
}
|
||
out_vec
|
||
}
|
||
println!("{:?}", full_arrangement(vec![1, 2, 3])); //[[1], [1, 2], [1, 2, 3], [2], [2, 3], [3]]
|
||
<span class="boring">}</span></code></pre></pre>
|
||
<h2 id="vec-排序"><a class="header" href="#vec-排序">Vec 排序</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
|
||
</span><span class="boring">fn main() {
|
||
</span>pub fn permute(nums: Vec<i32>) -> Vec<Vec<i32>> {
|
||
if nums.len() <= 1 { return vec![nums]; };
|
||
let mut ret = vec![];
|
||
for i in 0..nums.len() {
|
||
let mut iter_ret = vec![];
|
||
let mut cloned_nums = nums.clone();
|
||
let index_item = cloned_nums.remove(i);
|
||
iter_ret.push(index_item);
|
||
for x in Solution::permute(cloned_nums) {
|
||
let mut cloned_iter_ret = iter_ret.clone();
|
||
cloned_iter_ret.extend(x);
|
||
ret.push(cloned_iter_ret);
|
||
}
|
||
}
|
||
ret
|
||
}
|
||
let ret = vec![
|
||
vec![1, 2, 3],
|
||
vec![1, 3, 2],
|
||
vec![2, 1, 3],
|
||
vec![2, 3, 1],
|
||
vec![3, 1, 2],
|
||
vec![3, 2, 1]
|
||
];
|
||
assert_eq!(ret, permute(vec![1, 2, 3]));//全排序
|
||
<span class="boring">}</span></code></pre></pre>
|
||
<h2 id="vec-组合-combinations"><a class="header" href="#vec-组合-combinations">Vec 组合 (combinations)</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust">pub fn combinations() {
|
||
// 组合 Combination
|
||
pub struct Combinations<T>
|
||
where
|
||
T: Ord + Clone,
|
||
{
|
||
original: Vec<T>,
|
||
possition: Vec<usize>,
|
||
len: usize,
|
||
started: bool,
|
||
}
|
||
impl<T> Combinations<T>
|
||
where
|
||
T: Ord + Clone,
|
||
{
|
||
//new
|
||
pub fn new(mut original: Vec<T>, len: usize) -> Self {
|
||
if original.len() > len && len >= 1 {
|
||
original.sort_unstable();
|
||
Self {
|
||
original,
|
||
possition: (0..len).collect(),
|
||
len,
|
||
started: false,
|
||
}
|
||
} else {
|
||
panic!("the length has to be smaller then the datasets len");
|
||
}
|
||
}
|
||
//insert
|
||
fn insert(&self, col: &mut Vec<T>) {
|
||
col.clear();
|
||
self.possition
|
||
.iter()
|
||
.enumerate()
|
||
.for_each(|(p, n)| col.insert(p, self.original[*n].clone()))
|
||
}
|
||
//next
|
||
pub fn next_combination(&mut self, mut comb: &mut Vec<T>) -> bool {
|
||
if !self.started {
|
||
// first pass throught
|
||
self.started = true;
|
||
self.insert(&mut comb);
|
||
true
|
||
} else {
|
||
let org_len = self.original.len();
|
||
// check if we cant bump the back number
|
||
if self.original[self.possition[self.len - 1]] == self.original[org_len - 1] {
|
||
// locate the number closest behind that needs to be bumped
|
||
for i in 2..=self.len {
|
||
if self.original[self.possition[self.len - i]]
|
||
< self.original[org_len - i]
|
||
{
|
||
//find the value of the
|
||
let lastpos = self.possition[self.len - i];
|
||
let val = &self.original[lastpos];
|
||
for j in lastpos + 1..org_len {
|
||
if *val < self.original[j] {
|
||
for k in 0..i {
|
||
self.possition[self.len - i + k] = j + k;
|
||
}
|
||
self.insert(&mut comb);
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
false
|
||
} else {
|
||
let mut i = self.possition[self.len - 1];
|
||
let current = &self.original[i];
|
||
let mut next = current;
|
||
while current == next {
|
||
i += 1;
|
||
next = &self.original[i];
|
||
}
|
||
self.possition[self.len - 1] = i;
|
||
self.insert(&mut comb);
|
||
true
|
||
}
|
||
}
|
||
}
|
||
}
|
||
impl<T> Iterator for Combinations<T>
|
||
where
|
||
T: Ord + Clone,
|
||
{
|
||
type Item = Vec<T>;
|
||
fn next(&mut self) -> Option<Self::Item> {
|
||
let mut vals = Vec::with_capacity(self.len);
|
||
if self.next_combination(&mut vals) {
|
||
Some(vals)
|
||
} else {
|
||
None
|
||
}
|
||
}
|
||
}
|
||
let mut comb = Combinations::new(vec![1, 2, 3, 4], 3).collect::<Vec<_>>();
|
||
println!("{:?}", comb); //[[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
|
||
}
|
||
fn main(){
|
||
combinations();
|
||
}</code></pre></pre>
|
||
<h2 id="二分查找-binary-search"><a class="header" href="#二分查找-binary-search">二分查找 (binary search)</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
|
||
</span><span class="boring">fn main() {
|
||
</span>let binary_search = |f: Vec<i32>, target: i32| {
|
||
let mut low = 0;
|
||
let mut high = f.len() - 1;
|
||
while low < high {
|
||
let mid = f64::floor((high - low) as f64 / 2.) as usize + low;
|
||
if f[mid] < target {
|
||
low = mid + 1;
|
||
} else {
|
||
high = mid;
|
||
}
|
||
}
|
||
return low;
|
||
};
|
||
assert_eq!(binary_search(vec![2, 5, 8], 8),2);
|
||
<span class="boring">}</span></code></pre></pre>
|
||
<h2 id="hj4-字符串分割"><a class="header" href="#hj4-字符串分割">HJ4 字符串分割</a></h2>
|
||
<p>•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;
|
||
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
|
||
输入描述:
|
||
连续输入字符串(每个字符串长度小于等于100)
|
||
输出描述:
|
||
依次输出所有分割后的长度为8的新字符串</p>
|
||
<pre><code>示例1
|
||
输入:
|
||
abc
|
||
复制
|
||
输出:
|
||
abc00000
|
||
</code></pre>
|
||
<pre><pre class="playground"><code class="language-rust">use std::io::{self, *};
|
||
fn main() {
|
||
let stdin = io::stdin();
|
||
unsafe {
|
||
for line in stdin.lock().lines() {
|
||
let mut ll = line.unwrap();
|
||
if ll.len()==8{
|
||
println!("{}",ll);
|
||
}
|
||
else if ll.len()<8{
|
||
let z = 8-ll.len();
|
||
for i in 0..z{
|
||
ll.push('0');
|
||
}
|
||
println!("{}",ll);
|
||
}
|
||
else{
|
||
let l_vec = ll.split("").filter(|s|!s.is_empty()).map(|s|s.to_string()).collect::<Vec<_>>();
|
||
let ll_vec = l_vec.chunks(8).collect::<Vec<_>>();
|
||
for ll in ll_vec{
|
||
if ll.len()==8{
|
||
println!("{}",ll.join(""));
|
||
}
|
||
else if ll.len()<8{
|
||
let mut lll = ll.to_vec();
|
||
let z = 8-ll.len();
|
||
for i in 0..z{
|
||
lll.push("0".to_string());
|
||
}
|
||
println!("{}",lll.join(""));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}</code></pre></pre>
|
||
<h2 id="chunks-windows"><a class="header" href="#chunks-windows">chunks windows</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
|
||
</span><span class="boring">fn main() {
|
||
</span>pub fn chunk_windows() {
|
||
let a = vec![1, 2, 3];
|
||
let a_chunks = a
|
||
.iter()
|
||
.as_slice()
|
||
.chunks(2)
|
||
.map(|s| s.to_vec())
|
||
.collect::<Vec<_>>();
|
||
let a_windows = a
|
||
.iter()
|
||
.as_slice()
|
||
.windows(2)
|
||
.map(|s| s.to_vec())
|
||
.collect::<Vec<_>>();
|
||
println!("{:?}", a_chunks);
|
||
println!("{:?}", a_windows);
|
||
// [[1, 2], [3]]
|
||
// [[1, 2], [2, 3]]
|
||
}
|
||
<span class="boring">}</span></code></pre></pre>
|
||
<h2 id="字母出现次数统计-count-letters"><a class="header" href="#字母出现次数统计-count-letters">字母出现次数统计 (count letters)</a></h2>
|
||
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
|
||
</span><span class="boring">fn main() {
|
||
</span>//是否有效的字母异位词
|
||
pub fn is_anagram(s: String, t: String) -> bool {
|
||
//字母出现次数统计
|
||
fn count_letter(s: String) -> std::collections::BTreeMap<char, i32> {
|
||
use std::collections::BTreeMap;
|
||
let mut map: BTreeMap<char, i32> = BTreeMap::new();
|
||
for c in s.chars() {
|
||
if !map.contains_key(&c) {
|
||
map.insert(c, 0);
|
||
} else {
|
||
*map.get_mut(&c).unwrap() += 1;
|
||
}
|
||
}
|
||
map
|
||
}
|
||
count_letter(s) == count_letter(t)
|
||
}
|
||
<span class="boring">}</span></code></pre></pre>
|
||
|
||
</main>
|
||
|
||
<nav class="nav-wrapper" aria-label="Page navigation">
|
||
<!-- Mobile navigation buttons -->
|
||
<a rel="prev" href="../../posts/leetcode/rust_huawei.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
||
<i class="fa fa-angle-left"></i>
|
||
</a>
|
||
|
||
<a rel="next prefetch" href="../../posts/leetcode/olympiad_training.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
||
<i class="fa fa-angle-right"></i>
|
||
</a>
|
||
|
||
<div style="clear: both"></div>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
|
||
<nav class="nav-wide-wrapper" aria-label="Page navigation">
|
||
<a rel="prev" href="../../posts/leetcode/rust_huawei.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
||
<i class="fa fa-angle-left"></i>
|
||
</a>
|
||
|
||
<a rel="next prefetch" href="../../posts/leetcode/olympiad_training.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
||
<i class="fa fa-angle-right"></i>
|
||
</a>
|
||
</nav>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<script>
|
||
window.playground_line_numbers = true;
|
||
</script>
|
||
|
||
<script>
|
||
window.playground_copyable = true;
|
||
</script>
|
||
|
||
<script src="../../ace.js"></script>
|
||
<script src="../../editor.js"></script>
|
||
<script src="../../mode-rust.js"></script>
|
||
<script src="../../theme-dawn.js"></script>
|
||
<script src="../../theme-tomorrow_night.js"></script>
|
||
|
||
<script src="../../elasticlunr.min.js"></script>
|
||
<script src="../../mark.min.js"></script>
|
||
<script src="../../searcher.js"></script>
|
||
|
||
<script src="../../clipboard.min.js"></script>
|
||
<script src="../../highlight.js"></script>
|
||
<script src="../../book.js"></script>
|
||
|
||
<!-- Custom JS scripts -->
|
||
<script src="../../src/js/custom.js"></script>
|
||
|
||
|
||
</div>
|
||
</body>
|
||
</html>
|