การเปรียบเทียบและค้นหาไบต์
ใช้ตัวช่วยของ std.mem กับสตริง
การเปรียบเทียบและค้นหาไบต์ เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
ใช้ == ไม่ได้
slice สองตัวเป็นหน้าต่างคนละบาน ดังนั้น == จะเปรียบเทียบพอยน์เตอร์และความยาว ไม่ใช่เนื้อหา การเปรียบเทียบข้อความต้องตรวจสอบไบต์ทีละไบต์อย่างแท้จริง
std.mem ช่วยได้
โมดูลไลบรารีมาตรฐาน std.mem ทำงานกับ slice ที่มีชนิดสมาชิกใดก็ได้ รวมถึงสตริงชนิด []const u8 ของคุณด้วย
const std = @import("std");
const mem = std.mem;eql เปรียบเทียบเนื้อหา
ใช้ mem.eql เพื่อทดสอบว่า slice สองตัวเก็บไบต์ชุดเดียวกันในลำดับเดียวกันหรือไม่ ฟังก์ชันนี้คืนค่า bool ธรรมดาที่คุณนำไปใช้ในเงื่อนไขได้
mem.eql(u8, "zig", "zig"); // trueส่งชนิดสมาชิก
ตัวช่วย std.mem หลายตัวรับชนิดสมาชิกเป็นอาร์กิวเมนต์ตัวแรก สำหรับสตริง อาร์กิวเมนต์นั้นจะเป็น u8 เสมอ ซึ่งตรงกับ []const u8
ค้นหาสตริงย่อย
ค้นหาข้อความภายในข้อความด้วย indexOf ฟังก์ชันนี้คืนค่าดัชนีแบบเลือกได้ ซึ่งเป็นตำแหน่งของรายการที่ตรงกันตัวแรก หรือคืนค่า null หากไม่พบ
mem.indexOf(u8, "hello", "ll"); // 2จัดการค่า null
เนื่องจาก indexOf คืนค่าแบบเลือกได้ ให้แกะค่าออกด้วย if หรือ orelse ผลลัพธ์ที่เป็น null หมายความง่าย ๆ ว่าไม่พบข้อความที่ค้นหา
if (mem.indexOf(u8, h, n)) |i| {
// found at i
}ค้นหาจากท้ายสุด
ต้องการรายการที่ปรากฏครั้งสุดท้ายแทนครั้งแรกใช่ไหม ให้ใช้ lastIndexOf ซึ่งจะค้นย้อนกลับและคืนค่าดัชนีแบบเลือกได้เช่นกัน
คำนำหน้าและคำต่อท้าย
ตรวจสอบว่าสตริงเริ่มต้นหรือลงท้ายด้วยข้อความที่กำหนดหรือไม่ด้วย startsWith และ endsWith ทั้งสองรับค่า u8 และคืนค่า bool ที่ใช้งานง่าย เหมาะสำหรับการแยกวิเคราะห์
mem.startsWith(u8, "main.zig", "main");ค้นหาไบต์เดี่ยว
หากต้องการระบุตำแหน่งของไบต์หนึ่งตัวแทนที่จะเป็นสตริงย่อย ให้ใช้ indexOfScalar นี่เป็นเส้นทางที่รวดเร็วเมื่อคุณต้องการอักขระเพียงตัวเดียว
mem.indexOfScalar(u8, "a,b", ',');นับจำนวนครั้งที่ปรากฏ
ใช้ mem.count เพื่อนับว่าข้อความที่ค้นหาปรากฏในข้อความกี่ครั้ง ฟังก์ชันนี้คืนค่า usize และไม่คืนค่า null แม้จำนวนจะเป็นศูนย์
mem.count(u8, "aaa", "a"); // 3การพิจารณาตัวพิมพ์
ตัวช่วยเหล่านี้แยกตัวพิมพ์เล็กใหญ่: A และ a เป็นไบต์คนละค่า หากต้องการจับคู่โดยไม่แยกตัวพิมพ์ ให้ปรับรูปแบบตัวพิมพ์ก่อน
ตรวจสอบความเข้าใจอย่างรวดเร็ว
คุณต้องการทราบว่าสตริงสองตัวมีข้อความเหมือนกันทุกประการหรือไม่
สรุปทบทวน
คุณเปรียบเทียบข้อความด้วย mem.eql และค้นหาด้วย indexOf, startsWith, indexOfScalar และ count ซึ่งทั้งหมดรองรับการจัดการค่า null และตัวพิมพ์ 🔍
เรียนรู้ Zig ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “การเปรียบเทียบและค้นหาไบต์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเปรียบเทียบและค้นหาไบต์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเปรียบเทียบและค้นหาไบต์”
ใช้ตัวช่วยของ std.mem กับสตริง คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การเปรียบเทียบและค้นหาไบต์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สตริงคือ []const u8
- ค่าตัวอักษรสตริงและอักขระหลีก
- การเปรียบเทียบและค้นหาไบต์
- จัดรูปแบบข้อความด้วย std.fmt