dnrops.gitlink.net/posts/rust/rust_grammer.html

1507 lines
73 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML>
<html lang="en" class="coal" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>rust grammar - Andrew&#x27;s Blog</title>
<!-- Custom HTML head -->
<meta name="description" content="Andrew Ryan&#x27;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 expanded "><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 expanded "><a href="../../posts/rust/rust_grammer.html" class="active"><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 "><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 "><a href="../../posts/leetcode/rust_utils.html"><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&#x27;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="rust-learn-notebook"><a class="header" href="#rust-learn-notebook">Rust learn notebook</a></h1>
<h2 id="trait-in-rust"><a class="header" href="#trait-in-rust">trait in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>struct Person{
name:String,
age:i128
}
trait VoiceBox {
// speak
fn speak(&amp;self);
// can speak
fn can_speak(&amp;self) -&gt;bool;
}
impl VoiceBox for Person{
fn speak(&amp;self) {
println!("I am {}",self.name);
}
fn can_speak(&amp;self) -&gt;bool {
if self.age&gt;0{
return true;
}else{
return false;
}
}
}
pub fn run(){
let this_person = Person{name:String::from("Alen"),age:24};
println!("{}can speak?{}",this_person.name,this_person.can_speak());
this_person.speak();
}
<span class="boring">}</span></code></pre></pre>
<h2 id="btreemap-类似于-python-的-mapjs-的-set-val-不能重复"><a class="header" href="#btreemap-类似于-python-的-mapjs-的-set-val-不能重复">BTreeMap (类似于 python 的 mapjs 的 Set) val 不能重复</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>#[allow(unused_variables)]
use std::collections::BTreeMap;
pub fn run() {
let mut each_value = String::new();
std::io::stdin().read_line(&amp;mut each_value).unwrap();
let mut bmap = BTreeMap::new();
bmap.insert("A", 1);
bmap.insert("B", 2);
bmap.insert("C", 3);
bmap.insert("D", 4);
bmap.insert("E", 5);
println!("{:?}", bmap);
// remove key-value
bmap.remove("C");
println!("{:?}", bmap);
// check for a specific one.
if !bmap.contains_key("C") {
//有的话return true 没有的话false
println!("{:?}", "C not font");
}
let mut data_vector = vec!["A", "B", "D"];
let str_value: &amp;str = &amp;each_value;
data_vector.push(str_value);
println!("{:?}", data_vector);
let mut out = BTreeMap::new();
for i in data_vector.iter() {
if bmap.get(i) != None {
let get_val = bmap.get(i);
out.insert(get_val, get_val);
println!("{:?}", get_val.to_owned());
}
}
}
<span class="boring">}</span></code></pre></pre>
<h2 id="types-in-rust"><a class="header" href="#types-in-rust">Types in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>pub fn run() {
// 默认情况下rust不需要声明
let x = 3; //默认i32
let y = 2.5; //默认f64
//添加声明
let k: i64 = 4515165161;
// i8最大小值
println!("MIN i8 {}", std::i8::MIN);
println!("MAX i8 {}", std::i8::MAX);
// i32最大小值
println!("MIN i32 {}", std::i32::MIN);
println!("MAX i32 {}", std::i32::MAX);
// i64最大小值
println!("MIN i64 {}", std::i64::MIN);
println!("MAX i64 {}", std::i64::MAX);
// i128最大小值
println!("MIN i128 {}", std::i128::MIN);
println!("MAX i128 {}", std::i128::MAX);
// isize (有符合)
let var_isize: isize = 9223372036854775807;
println!("{}", var_isize);
// usize (无符号)
let var_usize: usize = 1515;
println!("{}", var_usize);
//布尔类型
let name = true;
//声明布尔类型
let is_big: bool = 10 &gt; 5;
let face = '\u{1f151}';
let a = 'a'; //char
println!("{:?}", (x, y, k, name, is_big, a, face));
// 无符号数
let data: u8 = 150;
println!("{:?}", data);
let data: u16 = 150;
println!("{:?}", data);
let data: u32 = 150;
println!("{:?}", data);
let data: u64 = 150;
println!("{:?}", data);
let data: u128 = 150;
println!("{:?}", data);
// 浮点数
let float_num: f32 = 2.;
println!("{}", float_num);
let float_num: f64 = 0.22222222;
println!("{}", float_num);
// char 字符
let chars: char = 'A'; //need to be '' ,not can be ""
let cn_name: char = '艾';
println!("{},{}", chars, cn_name);
// change type in rust
// int to float or u64,u32..
// as
let int_data: i32 = 2020;
let float_data = int_data as f32;
let u64_data: u64 = int_data as u64;
println!("int to float:{}", float_data + 0.5);
println!("int to u64:{}", u64_data);
}
<span class="boring">}</span></code></pre></pre>
<h2 id="vector-in-rust"><a class="header" href="#vector-in-rust">Vector in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>//vector是向量
pub fn run() {
let mut n: Vec&lt;i32&gt; = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 0]; //[元素属性;向量的元素个数]
//改某一个元素值
n[9] = 10;
//添加元素
n.push(23); //最后面添加元素
n.push(15);
//删除最后一个元素
let popeditem = n.pop();
// 输出删除的元素
println!("poped itemis :{}", popeditem.unwrap());
println!("{:#?}", n); //竖直输出
println!("{:?}", n); //横向输出
//单一输出
println!("frist value:{:?}", n[0]); //输出第一个元素
println!("last value:{:?}", n[n.len() - 1]); //输出最后一个元素
//向量长度
println!("向量长度:{}", n.len());
//向量所占空间
println!("occupies {} byte", std::mem::size_of_val(&amp;n)); //每一个元素占4byte
//向量切片
let s = &amp;n[0..5]; //从第0到第4个元素
println!("{:?}", s);
//向量的遍历
for x in n.iter() {
println!("{}", x);
}
//向量遍历时改值
for x in n.iter_mut() {
*x *= 3; //每一个元素乘2
}
println!("{:?}", n);
}
<span class="boring">}</span></code></pre></pre>
<h2 id="vecdeque-双向链表"><a class="header" href="#vecdeque-双向链表">VecDeque (双向链表)</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>use std::{collections::VecDeque};
pub fn run(){
let mut buff = VecDeque::new();
// add to front buffer
buff.push_front(1);
buff.push_front(4);
// add to end buffer
buff.push_back(10);
buff.push_back(40);
println!("{:?}", buff);
// Swaps elements at indices i and j.
buff.swap(0, 2);
println!("{:?}",buff);
//get capacity 占的空间
let len = buff.capacity();
println!("{}",len);
//get length
let length = buff.len();
println!("{}",length);
buff.reserve_exact(len);
println!("{:?}",buff);
//to Vec
let c: Vec&lt;&amp;i32&gt; = buff.iter().collect();
println!("vec: {:?}",c);
//lop value
for num in buff.iter() {
let val = *num;
println!("{}",val);
}
//loop value and change
for num in buff.iter_mut() {
*num = *num - 2; }
println!("{:?}",buff);
}
<span class="boring">}</span></code></pre></pre>
<h2 id="enum-in-rust"><a class="header" href="#enum-in-rust">enum in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>#[allow(dead_code)]
enum Alphabet{
A,
B,
C,
D,
E,
Z,
W
}
impl Alphabet {
fn is_end_leter(&amp;self) -&gt;bool{
match self {
&amp;Alphabet::Z =&gt;return true,
_ =&gt;return false
}
}
}
pub fn run(){
let d = Alphabet::Z;
println!("{:?}",d.is_end_leter());
}
//another example
enum Colors {
Red = 0xff0000,
Black = 0x000fff,
}
struct Bank{
pub cardnumber: String,
pub amount: f32,
}
enum Payments {
Cash(f32),
CirditCard(String,f32),
BankCard(Bank),
OnlineCard{user:String,amount:f32},
}
pub fn run(){
// use color enum
println!("{:06x}",Colors::Red as i32);
println!("{:06x}",Colors::Black as i32);
//use Payments enum
let cashpay = Payments::Cash(3000000.5);
process_payment(cashpay);
let cc_pay = Payments::CirditCard("jiaotong".to_owned(),1000000.66);
process_payment(cc_pay);
let bank_pay = Payments::BankCard(Bank{cardnumber:"622000111222111".to_owned(),amount:23000.});
process_payment(bank_pay);
let online = Payments::OnlineCard{user:"Alen".to_owned(),amount:600000.};
process_payment(online);
}
fn process_payment(pay:Payments){
match pay{
Payments::Cash(amt)=&gt; {println!("It is{}",amt);}
Payments::CirditCard(_,amt)=&gt; {println!("It is{}",amt);}
Payments::BankCard(data)=&gt; {println!("It is{} {}",data.cardnumber,data.amount);}
Payments::OnlineCard{user,amount}=&gt; {println!("It is{} {}",user,amount);}
}
}
<span class="boring">}</span></code></pre></pre>
<h2 id="sum-up-ascii_code"><a class="header" href="#sum-up-ascii_code">sum up ascii_code</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>fn sum_up_ascii_code(b: String) -&gt; f64 {
let mut sum: u32 = 0;
for i in b.chars() {
sum += i as u32
}
return (sum as i32) as f64;
}
let result_1 = sum_up_ascii_code("AB".to_string());
println!("{}", result_1);
<span class="boring">}</span></code></pre></pre>
<h2 id="cell-in-rust"><a class="header" href="#cell-in-rust">Cell in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>#[allow(unused_variables)]
use std::cell::Cell;
/**
* Cell 原生值可以改
*/
#[allow(dead_code)]
struct Book {
name: String,
price: Cell&lt;u32&gt;,
}
pub fn run() {
let rust_book = Book {
name: "rust-book".into(),
price: Cell::new(99),
};
assert_eq!(rust_book.name, "rust-book");
assert_eq!(rust_book.price.get(), 99);
rust_book.price.set(199); //Cell 原生值可以改
assert_eq!(rust_book.price.get(), 199);
let s: String = "rust-book".into();
let bar = Cell::new(s);
bar.set("15".into()); //可以改值
let x = bar.into_inner(); //Get String value from Cell
println!("{}", x);
}
<span class="boring">}</span></code></pre></pre>
<h2 id="refcell-in-rust"><a class="header" href="#refcell-in-rust">RefCell in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>#[allow(unused_variables)]
use std::cell::RefCell;
/**
* RefCell 原生值可以改
*/
#[allow(dead_code)]
struct Book {
name: String,
price: RefCell&lt;u32&gt;,
}
pub fn run() {
let mut rust_book = Book {
name: "rust-book".into(),
price: RefCell::new(99),
};
assert_eq!(rust_book.name, "rust-book");
rust_book.price.borrow_mut(); //RefCell 原生值可以改
println!("{:?}", rust_book.price.borrow()); //99
println!("{:?}", rust_book.price.as_ptr()); //指针地址 0x7ffcb13f2c40
println!("{:?}", *rust_book.price.get_mut() + 10); //99+10 =&gt;109
let s: String = "rust-book".into();
let bar = RefCell::new(s);
bar.borrow_mut().push_str(" 15"); //可以改值 为rust-book 15
let x = bar.into_inner(); //Get String value from refCell
println!("{}", x);
}
<span class="boring">}</span></code></pre></pre>
<h2 id="generic-in-rust"><a class="header" href="#generic-in-rust">generic in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>#[allow(dead_code)]
// structF32 Point{
// x:i32,
// y:i32,
// }
// structF64 Point{
// x:i32,
// y:i32,
// } //为了 通用不同的type 可以用以下的操作
//struct can be generic
struct Point&lt;T, U&gt; {
x: T,
y: U, //要是x y 的type不一样 &lt;T,U&gt;
}
// enum canbe generic
enum Selection&lt;T&gt; {
// OptionA(T),
OptionB(T),
// OptionC,
}
//function can be generic
// std::ops::Add is a trait
// fn dog&lt;T:std::ops::Add&lt;Output=T&gt; + std::ops::Sub&lt;Output=T&gt; + std::fmt::Debug&gt;(dog_age:T,father_age:T,child_age:E) -&gt; T{
// println!("{:?}",father_age);
// let sub = dog_age-father_age;
// // let add = dog_age+father_age;
// sub
// } //这样写代码太长 下面做一些改善
fn dog&lt;T, E&gt;(dog_age: T, father_age: T, child_age: E) -&gt; T
where
T: std::ops::Add&lt;Output = T&gt; + std::ops::Sub&lt;Output = T&gt; + std::fmt::Debug,
E: std::fmt::Debug,
{
println!("{:?}", father_age);
println!("{:?}", child_age);
dog_age + father_age
}
// create owen trait
// add str to string
trait AddStr {
fn add(&amp;self, a: &amp;str, b: &amp;str) -&gt; String;
}
#[allow(non_snake_case)]
#[allow(dead_code)]
// use trait
fn add_str_to_String&lt;T&gt;(var: &amp;T) -&gt; String
where
T: AddStr + std::fmt::Debug,
{
println!("{:?}", var);
var.add("Alen", "Andry")
}
// sttuct can be generic
struct Person&lt;T, U&gt;
where
T: std::fmt::Debug,
U: std::fmt::Debug,
{
name_t: T,
age_u: U,
}
impl&lt;T, U&gt; Person&lt;T, U&gt;
where
T: std::fmt::Debug,
U: std::fmt::Debug,
{
fn log(&amp;self) {
println!("{:?} {:?}", self.name_t, self.age_u);
}
}
pub fn run() {
// generic struct
let a = Point {
x: 10_f32,
y: 30_i32,
}; //f32
println!("{} {}", a.x, a.y);
let a = Point {
x: 10.10_f32,
y: 30.6_f64,
}; //f64
println!("{} {}", a.x, a.y);
// generic enum
let s = Selection::OptionB("sting");
match s {
// Selection::OptionA(e)=&gt; println!("{}",e),
Selection::OptionB(f) =&gt; println!("{}", f),
// Selection::OptionC =&gt; println!("option c"),
}
// generic function
let f = dog(10, 20, 5);
println!("{:?}", f);
// add_str_to_String
// use struct generic
let alen = Person {
name_t: "23",
age_u: "11",
};
alen.log();
}
<span class="boring">}</span></code></pre></pre>
<h2 id="linkedlist-链表"><a class="header" href="#linkedlist-链表">LinkedList (链表)</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>use std::collections::LinkedList;
// 链表
pub fn run() {
let mut list = LinkedList::new();
list.push_front("1");
list.push_front("2");
list.push_front("3");
list.push_back("10");
list.push_back("20");
list.push_back("30");
println!("{:?}", list);
// change list item type Sting ti int
let mut str_to_int = LinkedList::new();
for item in list.iter() {
str_to_int.push_back(item.parse::&lt;i32&gt;().unwrap());
}
println!("to int:{:?}", str_to_int);
let mut new_list = LinkedList::new();
new_list.push_front(1);
new_list.push_front(2);
new_list.push_front(3);
new_list.push_back(10);
new_list.push_back(20);
new_list.push_back(30);
println!("{:?}", new_list);
//change new_list type int to String
let mut int_to_string = LinkedList::new();
for item in new_list.iter() {
int_to_string.push_back(item.to_string());
}
println!("to str:{:?}", int_to_string);
// append Moves all elements from list2 to the end of the list.
// list.append(list2) list2 become empty
// convert a &amp;str to a String is to_owned
// list 中的元素是&amp;str int_to_string 是String 所以会出错
let mut list_sting = LinkedList::new();
for item in list.iter_mut() {
let new_item: String = item.to_owned(); //&amp;str converto string
list_sting.push_back(new_item);
}
list_sting.append(&amp;mut int_to_string); //int_to_string to the end of list_sting
println!("{:?}", list_sting);
// pub fn back(&amp;self) -&gt; Option&lt;&amp;T&gt;
// assert_eq!(list_sting.back(),Some(&amp;Sting::from("30")));
}
<span class="boring">}</span></code></pre></pre>
<h2 id="module-in-rust"><a class="header" href="#module-in-rust">module in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>// 可以直接定义mod
mod printer{
pub fn print(data:String){
println!("{}",data);
}
// 也可以在mod 里面定义mod
pub mod show{
pub fn show_age(age:&amp;str){
println!("age :{}",age);
}
}
}
pub fn run(){
printer::print("Alen".to_string());
printer::show::show_age("24");
}
<span class="boring">}</span></code></pre></pre>
<h2 id="options-in-rust"><a class="header" href="#options-in-rust">options in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>pub fn run() {
println!(
"job is {}",
match get_job("Alen") {
Some(j) =&gt; j,
None =&gt; "no find",
}
);
}
fn get_job(name: &amp;str) -&gt; Option&lt;&amp;str&gt; {
match name {
"Alen" =&gt; Some("Software developer"),
"Andry" =&gt; Some("Web Disigner"),
_ =&gt; None,
}
}
<span class="boring">}</span></code></pre></pre>
<h2 id="parse-json-in-rust"><a class="header" href="#parse-json-in-rust">parse json in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>extern crate serde;
extern crate serde_json;
// #[macro_use]
// extern crate serde_derive;
#[allow(unused_imports)]
use serde_json::Value as jsonvalue;
// #[derive(Serialize,Deserialize)]
#[allow(dead_code)]
// struct Person {
// name: String,
// age: u32,
// is_male: bool,
// language: String,
// }
pub fn run() {
let json_string = r#"
{
"name":"Alen Andry",
"age":"24",
"is_male":true,
"language":"English"
}
"#;
let res = serde_json::from_str(json_string);
if res.is_ok() {
let p: jsonvalue = res.unwrap();
println!("name = {:?}", &amp;p["name"].as_str().unwrap());
println!("age = {:?}", &amp;p["age"].as_str().unwrap());
println!("is_male = {:?}", &amp;p["is_male"]);
println!("language = {:?}", &amp;p["language"]);
} else {
println!("not get json");
}
}
<span class="boring">}</span></code></pre></pre>
<h2 id="generate-random-number-in-rust"><a class="header" href="#generate-random-number-in-rust">generate random number in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>extern crate rand;
use rand::Rng;
pub fn run() {
{
//range random num
let random_num = rand::thread_rng().gen_range(10, 25); //1-24
println!("{}", random_num);
}
{
//randim boolean value
let bool = rand::thread_rng().gen_weighted_bool(2); //概率0.5 为true
let bool1 = rand::thread_rng().gen_weighted_bool(5); //概率1/5=0.2 为true
println!("random boolean {} {}", bool, bool1);
}
}
<span class="boring">}</span></code></pre></pre>
<h2 id="read-file-in-rust"><a class="header" href="#read-file-in-rust">read file in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>use std::fs::File;
use std::io::prelude::*;
#[allow(unused_imports)]
use std::io::{BufRead, BufReader, Error, Write};
#[allow(dead_code)]
pub fn run() {
{
//read toml file
let mut toml_file = File::open("toml_file.toml").expect("Can't open");
let mut content = String::new();
toml_file
.read_to_string(&amp;mut content)
.expect("Can't to string");
println!("toml file content:{}", content);
}
{
//read txt file
let mut txt_file =
File::open("/home/alen/code/rust_code/rust_grammar/txt_file.txt").expect("Can't open");
let mut content = String::new();
txt_file
.read_to_string(&amp;mut content)
.expect("Can't to string");
println!("txt file content:{}", content);
}
}
<span class="boring">}</span></code></pre></pre>
<h2 id="write-file-in-rust"><a class="header" href="#write-file-in-rust">write file in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>use std::fs::File;
use std::io::prelude::*;
pub fn run() {
{
//write toml
let mut toml_file = File::create("output.toml").expect("can't create file");
toml_file
.write_all(b"[output]\ndata = \"output.toml\"")
.expect("can't write");
}
{
//write txt
let mut txt_file = File::create("output.txt").expect("can't create file");
txt_file
.write_all(b"txt file\ndata = \"output.txt\"")
.expect("can't write");
}
}
<span class="boring">}</span></code></pre></pre>
<h2 id="regex-in-rust"><a class="header" href="#regex-in-rust">regex in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>extern crate regex;
use regex::Regex;
<span class="boring">}</span></code></pre></pre>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>pub fn run() {
{//captures
let re = Regex::new(r"(?x)(?P&lt;year&gt;\d{4})-(?P&lt;month&gt;\d{2})-(?P&lt;day&gt;\d{2})").unwrap();
let caps = re.captures("2010-03-1400").unwrap();
dbg!(&amp;caps[0]);
dbg!(&amp;caps["year"]);
}
{//captures_iter 可遍历
let re = Regex::new(r"(?x)(?P&lt;year&gt;\d{4})-(?P&lt;month&gt;\d{2})-(?P&lt;day&gt;\d{2})").unwrap();
let caps = re.captures_iter("2010-03-1400");
for i in caps {
dbg!(&amp;i);
}
}
{
let re = Regex::new(r"(\d{5})").unwrap(); //match 5个数
let txt = "12345";
println!("{}", re.is_match(txt));
match re.captures(txt) {
Some(val) =&gt; println!("{}", &amp;val[0]),
None =&gt; println!("none"),
}
}
{//str to vec! split str to Vec
let re = Regex::new(r"[ \t]+").unwrap();
let fields: Vec&lt;&amp;str&gt; = re.split("a b \t c\td e").collect();
dbg!(&amp;fields);
assert_eq!(fields, vec!["a", "b", "c", "d", "e"]);
}
{//is match 返回 true flase
let text = "I categorically deny having";
dbg!(Regex::new(r"\b\w{4}\b").unwrap().is_match(text)); //regex 匹配四个字母 存在的话返回true
assert!(Regex::new(r"\b\w{4}\b").unwrap().is_match(text));
}
{//find
let text = "I alen categorically deny having triskaidekaphobia.";
let mat = Regex::new(r"\b\w{4}\b").unwrap().find(text).unwrap(); //从左开始匹配 返回满足条件的开始 结束index
dbg!(mat);
}
{//NoExpand
use regex::NoExpand;
let re = Regex::new(r"(?P&lt;last&gt;[^,\s]+),\s+(\S+)").unwrap();
let result = re.replace("^Springsteen, Bruce", NoExpand("$2 $last"));
dbg!(result);
}
{//返回first match 的位置
let text = "aaaaa";
let pos = Regex::new(r"a+").unwrap().shortest_match(text);
dbg!(pos.unwrap());
}
}
<span class="boring">}</span></code></pre></pre>
<h2 id="字符串反转-reverse-string"><a class="header" href="#字符串反转-reverse-string">字符串反转 reverse string</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>fn reverse(phrase:&amp;str)-&gt; String {
let mut i = phrase.len();
let mut reversed = String::new();
while i &gt; 0 {
reversed.push(phrase.chars().nth(i - 1).unwrap());
i -= 1;
}
reversed
}
<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>use std::thread;
use std::time::{Duration, Instant};
fn expensive_function() {
//一秒后执行的函数
thread::sleep(Duration::from_secs(1));
}
pub fn run() {
let start = Instant::now(); //开始计时
expensive_function();
expensive_function();
expensive_function();
expensive_function();
expensive_function();
let duration = start.elapsed(); //停止计时
println!("Time elapsed in expensive_function() is: {:?}", duration); //run expensive_function() 经历的时间
}
<span class="boring">}</span></code></pre></pre>
<h2 id="string-in-rust"><a class="header" href="#string-in-rust">String in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>#[allow(unused_variables)]
pub fn run() {
// str 不可变
let str: &amp;str = "Hello";
println!("{}", str);
// string 可变
let string = String::from("Hello world");
println!("{}", string);
// convert &amp;srt to String &amp;str转化为string
let some_str: &amp;str = "data";
let sring_from_str = some_str.to_owned();
assert_eq!(sring_from_str, String::from("data"));
{
// string to &amp;str
let name = String::from("Alen Andry");
let name_str: &amp;str = name.as_str();
println!("&amp;str:{}", name_str);
}
let i = 5;
let five = String::from("5");
assert_eq!(five, i.to_string());
let mut name = String::from("Alen ");
//添加char
name.push('A');
//添加string
name.push_str("ndry");
//长度
let length = name.len();
//所占字节
let capacity = name.capacity();
// 字符串是否空
let is_empty = name.is_empty();
//是否包含子串
let contains = name.contains("Andry");
//交换子串
let change = name.replace("Andry", "Dnrops"); // Andry-&gt;Dnrops
println!("name:{:?}\nlength:{:?}", (name), (length));
println!("capacity:{:?}\nis_empy:{:?}", (capacity), (is_empty));
println!("Is Andry contains name:{:?}", (contains));
println!("{}", change);
//遍历string (按空格)
for word in name.split_whitespace() {
println!("{}", word);
}
// 按字节新建string
let mut s = String::with_capacity(10); //新建大小为10字节的string
s.push('a'); //在string里添加元素
s.push('B');
println!("{}", s);
//断言测试 (测试左右值是否相等)
//assert_eq!(1,2);
//只有不相等时提示错误
assert_eq!(2, s.len());
assert_eq!(10, s.capacity());
// push
let mut some_string = String::new();
some_string.push('a');
some_string.push('a');
some_string.push('a');
some_string.push('a');
// push_str
some_string.push_str("\tmy name is alen");
println!("{}", some_string);
//combine two string
let new_some_string = String::from(" mali");
let mut_string = String::from(" Andry");
let my_mali: String = String::from("I LOVE MICHELLE");
let combined_string = some_string + &amp;new_some_string + &amp;mut_string + &amp;my_mali;
println!("{}", combined_string);
// substring
let sub_string = &amp;combined_string[..5]; //0-4
let sub_string1 = &amp;combined_string[16..]; //16-end
let sub_string2 = &amp;combined_string[16..20]; //16-20
println!("{}\n{}\n{}", sub_string, sub_string1, sub_string2);
// get char by index
let mali: String = String::from("I LOVE MICHELLE");
let get_char_index2 = &amp;mali.chars().nth(2).unwrap();
println!("{}", get_char_index2);
// for 遍历 String
for item in 0..mali.len() {
println!("{}", &amp;mali.chars().nth(item).unwrap());
}
// match Sting
let get_char_index3 = &amp;mali.chars().nth(5);
match get_char_index3 {
Some(i) =&gt; println!("It is {}", i),
None =&gt; {}
}
// if let 跟 match 一样
if let Some(i) = &amp;mali.chars().nth(5) {
println!("It is {}", i);
}
//删除俩端的空格
{
let name = " Alen ".to_string();
println!("before :{}", name);
let after = name.trim();
println!("after:{}", after);
}
{
//转化为大写
let mut s = String::from("foobar");
let s_mut_str = s.as_mut_str();
s_mut_str.make_ascii_uppercase();
println!("uppercase :{}", s_mut_str);
}
{
//转化为ascii码
let s = String::from("hello");
let s_ascii_str: &amp;[u8] = s.as_bytes();
println!("ascii:{:?}", s_ascii_str);
}
{
//string 反转化
let mut s = String::from("hello");
unsafe {
let vec = s.as_mut_vec();
assert_eq!(&amp;[104, 101, 108, 108, 111][..], &amp;vec[..]);
vec.reverse();
}
assert_eq!(s, "olleh");
println!("reversed:{}", s);
}
{
//清空string
let mut s = String::from("foo");
s.clear();
assert!(s.is_empty());
assert_eq!(0, s.len());
assert_eq!(3, s.capacity());
}
}
<span class="boring">}</span></code></pre></pre>
<h2 id="struct-结构体"><a class="header" href="#struct-结构体">struct 结构体</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>//结构体(name field struct)
// struct name 第一个字母必须得大写
struct Book {
name: String,
athur: String,
}
//tuple struct (元组结构体)
struct Cellphone(&amp;'static str, String, u64);
//单元结构体
struct Empty;
//结构体创建函数
struct Person {
f_name: String,
l_name: String,
}
//结构体创建函数
impl Person {
//
fn new_str(m: &amp;str, n: &amp;str) -&gt; Person {
// return Person{name:f_name,lname:l_name};
Person {
f_name: m.to_string(),
l_name: n.to_string(),
}
}
//full name // 使用在impl里面
fn full_name(&amp;self) -&gt; String {
format!("{} {}", self.f_name, self.l_name)
}
//set last name
fn set_last_name(&amp;mut self, last: &amp;str) {
self.l_name = last.to_string();
}
//name to tuple(转化为元组)
fn to_tuple(self) -&gt; (String, String) {
(self.f_name, self.l_name)
}
}
// define some struct
struct FrameworkAndCompany {
msn: String,
pytorch: String,
tensorflow: String,
}
pub fn run() {
//调用(name field struct)
let mut c = Book {
name: "RUST".to_string(),
athur: String::from("Alen"),
};
c.athur = String::from("Andry");
println!("{} {}", c.name, c.athur);
//调用(tuple struct)
let mut phone = Cellphone("redmi", String::from("alen"), 2019);
phone.1 = String::from("Alen");
println!("marka is {} owener: {} year:{}", phone.0, phone.1, phone.2);
//调用单元结构体
let x = Empty;
println!("{:p}", &amp;x); //输出X的内存地址
//调用结构体创建函数
let mut p = Person::new_str("marry", "tusun");
println!("{} {}", p.f_name, p.l_name);
println!("full name: {}", p.full_name());
p.set_last_name("abduginy");
println!("full name: {}", p.full_name());
println!("full name to tuple: {:?}", p.to_tuple());
// use framework struct
let mut frames = FrameworkAndCompany {
tensorflow: "google".to_owned(),
msn: "MSN".to_owned(),
pytorch: "facebook".to_owned(),
};
//change name
frames.tensorflow = String::from("GOOGLE");
println!(" {:?}", frames.tensorflow);
println!(" {:?}", frames.msn);
println!(" {:?}", frames.pytorch);
let frames2 = FrameworkAndCompany {
msn: String::from("Dark Commany"),
..frames // 来填充剩下的 struct element
};
println!("{:?}", frames2.pytorch);
}
<span class="boring">}</span></code></pre></pre>
<h2 id="test-code-in-rust"><a class="header" href="#test-code-in-rust">Test code in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>//结构体(name field struct)
// struct name 第一个字母必须得大写
struct Book {
name: String,
athur: String,
}
//tuple struct (元组结构体)
struct Cellphone(&amp;'static str, String, u64);
//单元结构体
struct Empty;
//结构体创建函数
struct Person {
f_name: String,
l_name: String,
}
//结构体创建函数
impl Person {
//
fn new_str(m: &amp;str, n: &amp;str) -&gt; Person {
// return Person{name:f_name,lname:l_name};
Person {
f_name: m.to_string(),
l_name: n.to_string(),
}
}
//full name // 使用在impl里面
fn full_name(&amp;self) -&gt; String {
format!("{} {}", self.f_name, self.l_name)
}
//set last name
fn set_last_name(&amp;mut self, last: &amp;str) {
self.l_name = last.to_string();
}
//name to tuple(转化为元组)
fn to_tuple(self) -&gt; (String, String) {
(self.f_name, self.l_name)
}
}
// define some struct
struct FrameworkAndCompany {
msn: String,
pytorch: String,
tensorflow: String,
}
pub fn run() {
//调用(name field struct)
let mut c = Book {
name: "RUST".to_string(),
athur: String::from("Alen"),
};
c.athur = String::from("Andry");
println!("{} {}", c.name, c.athur);
//调用(tuple struct)
let mut phone = Cellphone("redmi", String::from("alen"), 2019);
phone.1 = String::from("Alen");
println!("marka is {} owener: {} year:{}", phone.0, phone.1, phone.2);
//调用单元结构体
let x = Empty;
println!("{:p}", &amp;x); //输出X的内存地址
//调用结构体创建函数
let mut p = Person::new_str("marry", "tusun");
println!("{} {}", p.f_name, p.l_name);
println!("full name: {}", p.full_name());
p.set_last_name("abduginy");
println!("full name: {}", p.full_name());
println!("full name to tuple: {:?}", p.to_tuple());
// use framework struct
let mut frames = FrameworkAndCompany {
tensorflow: "google".to_owned(),
msn: "MSN".to_owned(),
pytorch: "facebook".to_owned(),
};
//change name
frames.tensorflow = String::from("GOOGLE");
println!(" {:?}", frames.tensorflow);
println!(" {:?}", frames.msn);
println!(" {:?}", frames.pytorch);
let frames2 = FrameworkAndCompany {
msn: String::from("Dark Commany"),
..frames // 来填充剩下的 struct element
};
println!("{:?}", frames2.pytorch);
}
<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 find_smallest_int(arr: &amp;[i32]) -&gt; i32 {
let mut arr_vec = arr.to_vec(); //to_vec 是 arr转化为 vec
arr_vec.sort();
println!("{}", arr_vec[0]);
arr_vec[0]
}
<span class="boring">}</span></code></pre></pre>
<h2 id="fib-in-rust"><a class="header" href="#fib-in-rust">fib in rust</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>pub fn run() {
//produce fib
fn product_fib(prod: u64) {
// your code
let mut p: i64 = prod as i64;
fn fib(n: u64) -&gt; u64 {
match n {
0 =&gt; 1,
1 =&gt; 1,
_ =&gt; fib(n - 1) + fib(n - 2),
}
}
let mut list: Vec&lt;u64&gt; = Vec::new();
while p &gt; -1 {
list.push(fib(p as u64));
p -= 1;
}
println!("{:?}", list);
}
product_fib(8); //produce 8 number
}
<span class="boring">}</span></code></pre></pre>
<h2 id="rust-数组中删除重复的部分"><a class="header" href="#rust-数组中删除重复的部分">rust 数组中删除重复的部分</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>#[allow(dead_code)]
#[allow(unused_variables)]
#[allow(unused_mut)]
pub fn run() {
fn unique_in_order&lt;T&gt;(sequence: T) -&gt; Vec&lt;T::Item&gt;
where
T: std::iter::IntoIterator,
T::Item: std::cmp::PartialEq + std::fmt::Debug,
{
let mut v: Vec&lt;_&gt; = sequence.into_iter().collect();
v.dedup();
v
}
let data = vec!["A", "A", "B", "b", "b", "b"];
let data2 = "AAAABBBCCDAABBB".chars();
println!("{:?}", unique_in_order(data)); //["A", "B", "b"]
println!("{:?}", unique_in_order(data2)); //['A', 'B', 'C', 'D', 'A', 'B']
}
<span class="boring">}</span></code></pre></pre>
<h2 id="enumerate-遍历"><a class="header" href="#enumerate-遍历">enumerate (遍历)</a></h2>
<pre><pre class="playground"><code class="language-rust">pub mod c {
pub fn run() {
use proconio::{input, marker::*};
input! {
mut s: Chars,
}
let s = s
.iter_mut()
.map(|x| x.to_string().parse::&lt;i32&gt;().unwrap())
.collect::&lt;Vec&lt;_&gt;&gt;();
// println!("{:?}", s);
let mut items = Vec::new();
let mut indexs = Vec::new();
for (index, item) in s.iter().enumerate() {
items.push(item.to_string());
indexs.push(index.to_string());
// println!(
// "{} {}",
// s.len() as i32 - index.to_owned() as i32,
// item.to_owned()
// );
}
//if s = 145
println!("{:?}", indexs); //["0", "1", "2"]
println!("{:?}", items); //["1", "4", "5"]
}
}
fn main() {
c::run();
}</code></pre></pre>
<h2 id="quick-start-iter-fold"><a class="header" href="#quick-start-iter-fold">quick start iter fold()</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>let a = [1, 2, 3];
// the sum of all of the elements of the array
let sum = a.iter().fold((0,0), |init, x|
{
let n = init.0+*x;
let m = init.1+*x;
(n,m)
}
);
eprintln!("{:?}",sum);
<span class="boring">}</span></code></pre></pre>
<h2 id="select-mul-atcoder_abc_221_c"><a class="header" href="#select-mul-atcoder_abc_221_c">Select Mul (Atcoder_abc_221_C)</a></h2>
<pre><pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
</span><span class="boring">fn main() {
</span>Sample Input 1
123
Sample Output 1
63
As described in Problem Statement, there are six ways to separate it:
12 and 3,
21 and 3,
13 and 2,
31 and 2,
23 and 1,
32 and 1.
The products of these pairs, in this order, are 36, 63, 26, 62, 23, 32, with 63 being the maximum.
<span class="boring">}</span></code></pre></pre>
<pre><pre class="playground"><code class="language-rust">//solution for problem C
/*
input: 123
out: 63
{"1": "23", "12": "3", "3": "21", "31": "2", "32": "1"}
[23, 32, 36, 62, 63] -&gt;out max value
*/
pub mod c {
pub fn run() {
use proconio::{input, marker::*};
use std::collections::BTreeMap;
input! {
mut s: Chars,
}
//reverse
fn reverse(phrase: String) -&gt; String {
let mut i = phrase.len();
let mut reversed = String::new();
while i &gt; 0 {
reversed.push(phrase.chars().nth(i - 1).unwrap());
i -= 1;
}
reversed
}
let s = s.iter_mut().map(|x| x.to_string()).collect::&lt;Vec&lt;_&gt;&gt;();
//generate bmap
fn generate_bmap(s: Vec&lt;String&gt;) {
let s_string = s.join("").to_string();
let mut bmap: BTreeMap&lt;String, String&gt; = BTreeMap::new();
for i in 1..s_string.len() {
let mut s_string = s.clone().join("").to_string();
let s_string_l = s_string.split_off(i);
bmap.insert(s_string, s_string_l);
}
for i in 1..s_string.len() {
let mut s_string = reverse(s.clone().join("").to_string());
let s_string_l = s_string.split_off(i);
bmap.insert(s_string, s_string_l);
}
let mut first_last_string = s.clone()[s.len() - 1].to_string();
first_last_string.push_str(&amp;s.clone()[0].to_owned());
let mut middle_string = String::new();
for i in 1..s.len() - 1 {
middle_string.push_str(&amp;s.clone()[i]);
}
bmap.insert(first_last_string, middle_string);
let mut vec = vec![];
for (v, k) in &amp;bmap {
vec.push(
v.to_owned().parse::&lt;i128&gt;().unwrap() * k.to_owned().parse::&lt;i128&gt;().unwrap(),
);
}
vec.sort();
println!("{:?}", vec[vec.len() - 1]);
// println!("{:?}", bmap);
// println!("{:?}", vec);
}
generate_bmap(s.clone());
}
}
fn main() {
c::run();
}</code></pre></pre>
<h2 id="online-games-atcoder_abc_221_d"><a class="header" href="#online-games-atcoder_abc_221_d">Online games (Atcoder_abc_221_D)</a></h2>
<pre><pre class="playground"><code class="language-rust">//solution for problem D
// 3
// 1 2
// 2 3
// 3 1
mod d {
pub fn run() {
proconio::input! {
n: usize,
ab: [(u32, u32); n],
}
let mut m = std::collections::BTreeMap::new();
for (a, b) in ab {
*m.entry(a).or_insert(0) += 1;
*m.entry(a + b).or_insert(0) -= 1;
}
let mut d = vec![0; n + 1];
let mut p = 0;
let mut k = 0;
for (i, j) in m {
d[k as usize] += i - p;
p = i;
k += j;
}
d.remove(0);
println!(
"{:?}",
d.iter_mut()
.map(|x| x.to_string())
.collect::&lt;Vec&lt;_&gt;&gt;()
.join(" ")
);
}
}
fn main() {
d::run();
}</code></pre></pre>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../../posts/rust/offline_use_rust.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/rust/pase_string_and_decimal_conversion.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/rust/offline_use_rust.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/rust/pase_string_and_decimal_conversion.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>