ฟังก์ชั่น strtok() ทำงานอย่างไร?
เพื่อแยกสตริงโดยใช้ strtok() ก่อนอื่นคุณต้องเข้าใจวิธีการทำงาน เดอะ strtok() อ่านอักขระสตริงอินพุตทีละอักขระจนกว่าจะเจอตัวคั่น เมื่อพบตัวคั่น strtok() แทนที่ด้วยอักขระว่าง '\0' ซึ่งแบ่งสตริงเดิมออกเป็นสองส่วนได้อย่างมีประสิทธิภาพ ตัวชี้ไปยังอักขระตัวแรกของสตริงจะถูกส่งกลับโดยฟังก์ชัน เดอะ strtok() ไวยากรณ์ของฟังก์ชันคือ:
สตรอค ( ถ่าน * สตริง , คอสต์ ถ่าน * ฉันแบ่งปัน ) ;เดอะ strtok() ฟังก์ชันรับอาร์กิวเมนต์สองตัว- ตัวชี้ไปยังโทเค็นแรกในชุดของโทเค็นและสตริงที่เก็บอักขระตัวคั่น ส่งคืนตัวชี้ไปยังโทเค็นถัดไป ซึ่งเริ่มทำงานทันทีหลังจากตัวคั่นที่แยกโทเค็นสุดท้าย มันจะคืนค่า NULL หากไม่มีโทเค็นอีกต่อไป
วิธีแยกสตริงด้วย Strtok() ในการเขียนโปรแกรม C
นี่คือตัวอย่างวิธีการใช้งาน strtok() เพื่อแยกสตริง:
#รวม
#รวม
นานาชาติ หลัก ( ) {
ถ่าน ป้อนข้อมูล [ ] = 'ลินุกซ์คำแนะนำ' ;
ถ่าน * โทเค็น ;
โทเค็น = สตรอค ( ป้อนข้อมูล , ',' ) ;
ในขณะที่ ( โทเค็น != โมฆะ ) {
พิมพ์ฉ ( '%s \n ' , โทเค็น ) ;
โทเค็น = สตรอค ( โมฆะ , ',' ) ;
}
กลับ 0 ;
}
ในตัวอย่างข้างต้น ขั้นแรกเราจะประกาศตัวชี้เป็นอักขระ เราก็ใช้ strtok() เพื่อแยกสตริงอินพุตออกเป็นโทเค็น สายแรกของ strtok() รับสองอาร์กิวเมนต์: สตริงอินพุตและสตริงตัวคั่น ',' โทเค็นตัวแรก “Linux” คือตัวที่ strtok() กลับเป็นตัวชี้ไปที่ . จากนั้นเราจะใช้ลูป while เพื่อวนซ้ำผ่านสตริงอินพุตโดยใช้ strtok() ด้วยตัวชี้ NULL เพื่อแยกโทเค็นที่เหลือต่อไป สตริงตัวคั่นจะถูกส่งผ่านอีกครั้งเป็นอาร์กิวเมนต์ strtok() เพื่อระบุอักขระตัวคั่น
เอาต์พุต
ข้อจำกัดของฟังก์ชัน Strtok()
1: แก้ไขสตริงต้นฉบับ
เดอะ strtok() ฟังก์ชันไม่ส่งคืนสำเนาของสตริง แต่จะแก้ไขสตริงเดิมแทน ดังนั้น หากคุณจำเป็นต้องมีสตริงเวอร์ชันที่ไม่ได้แก้ไขหลังจากแยกแล้ว คุณควรทำสำเนาสตริงต้นฉบับก่อนที่จะเรียกใช้ strtok() .
2: อะซิงโครนัส
ข้อจำกัดสำคัญอย่างหนึ่งของ strtok() คือใช้ได้ทีละสายเท่านั้น กล่าวอีกนัยหนึ่ง คุณไม่สามารถใช้เพื่อโทเค็นหลายสตริงพร้อมกันได้
3: ความจุจำกัด
ข้อจำกัดที่เป็นไปได้อีกอย่างก็คือ strtok() มีความสามารถที่จำกัดในการจัดการกับตัวคั่นซ้ำๆ ตัวอย่างเช่น หากสตริงของคุณมีช่องว่างระหว่างคำติดต่อกัน strtok() ถือว่าเป็นตัวคั่นเดียว ในการจัดการกับกรณีดังกล่าว คุณจะต้องใช้วิธีอื่น
บทสรุป
เดอะ strtok() ฟังก์ชันเป็นฟังก์ชันที่มีประโยชน์มากสำหรับการแยกสตริงในการเขียนโปรแกรมภาษาซี ใช้สตริงอินพุตและสตริงตัวคั่นและส่งกลับตัวชี้ไปยังโทเค็นแรกที่พบในสตริงอินพุต strtok() เป็นอันตราย ดังนั้นหากคุณต้องการรักษาความสมบูรณ์ของสตริงต้นฉบับ ขอแนะนำให้สร้างสตริงที่ซ้ำกันแทน ตอนนี้คุณรู้วิธีการทำแล้ว คุณสามารถตัดสตริงใดๆ ให้เป็นชิ้นเล็กๆ สำหรับการประมวลผลได้