วิธีแยกสตริงด้วย strtok() ในการเขียนโปรแกรม C

Withi Yaek String Dwy Strtok Ni Kar Kheiyn Porkaerm C



การแยกสตริง มีความสำคัญด้วยเหตุผลต่างๆ กัน เช่น การประมวลผลข้อความ การวิเคราะห์ข้อมูล หรือการแยกวิเคราะห์ และภาษาโปรแกรม C มีหลายวิธีในการจัดการกับงานนี้ อย่างไรก็ตาม ฟังก์ชัน C ยอดนิยมที่ช่วยให้ แยกสตริง เป็นหลายโทเค็นโดยตัวคั่นที่ระบุคือ strtok() . เนื่องจากเป็นฟังก์ชันไลบรารี จึงมีอยู่ในไลบรารี C มาตรฐานที่รองรับการทำงานของสตริง

ฟังก์ชั่น 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() เป็นอันตราย ดังนั้นหากคุณต้องการรักษาความสมบูรณ์ของสตริงต้นฉบับ ขอแนะนำให้สร้างสตริงที่ซ้ำกันแทน ตอนนี้คุณรู้วิธีการทำแล้ว คุณสามารถตัดสตริงใดๆ ให้เป็นชิ้นเล็กๆ สำหรับการประมวลผลได้