C:
การลบตัวอักษรที่ตรงกับรูปแบบ
วิธีการ:
C ไม่มีฟังก์ชันในตัวสำหรับการลบอักขระจากสตริงโดยตรงตามรูปแบบ, ไม่เหมือนกับภาษาระดับสูงบางภาษา อย่างไรก็ตาม, คุณสามารถทำภารกิจนี้ได้โดยง่ายด้วยการวนซ้ำผ่านสตริงด้วยตนเองและสร้างสตริงใหม่ที่ไม่รวมอักขระที่ไม่ต้องการ ตัวอย่างเช่น, สมมติว่าคุณต้องการลบตัวเลขทั้งหมดออกจากสตริง คุณสามารถทำได้ดังนี้:
#include <stdio.h>
#include <ctype.h>
void remove_digits(char *str) {
char *src = str, *dst = str;
while (*src) {
if (!isdigit((unsigned char)*src)) {
*dst++ = *src;
}
src++;
}
*dst = '\0';
}
int main() {
char str[] = "C Programming 101: The Basics!";
remove_digits(str);
printf("Result: %s\n", str);
return 0;
}
ผลลัพธ์ตัวอย่าง:
Result: C Programming : The Basics!
ตัวอย่างนี้ใช้ isdigit
จาก ctype.h
เพื่อระบุตัวเลข, ดึงอักขระที่ไม่ใช่ตัวเลขไปที่ต้นสตริง และสิ้นสุดสตริงเมื่อประเมินอักขระทั้งหมด
การศึกษาลึก
วิธีการที่นำเสนอใช้การเข้าหาด้วยตัวชี้สองตัวภายในอาร์เรย์เดียวกันเพื่อกรองอักขระที่ไม่ต้องการอย่างมีประสิทธิภาพ, เทคนิคที่เป็นสัญลักษณ์ของปรัชญาการจัดการหน่วยความจำแบบตรงๆ ของ C วิธีนี้มีประสิทธิภาพเพราะทำงานในสถานที่เดียว, หลีกเลี่ยงความจำเป็นในการจัดสรรหน่วยความจำเพิ่มเติมและจึงลดภาระการทำงาน
เนื่องจากปราศจากฟังก์ชันการจัดการสตริงระดับสูงใน C ได้บังคับให้โปรแกรมเมอร์ต้องพัฒนาความเข้าใจอย่างลึกซึ้งเกี่ยวกับการจัดการสตริงในระดับหน่วยความจำ, นำไปสู่การเข้าหาที่มีนวัตกรรมเช่นวิธีที่ได้กล่าวไว้ข้างต้น ถึงแม้ว่านี่จะเป็นข้อได้เปรียบในเรื่องของการควบคุมที่ดีขึ้นและประสิทธิภาพ, แต่ก็มาพร้อมกับความเสี่ยงที่สูงขึ้นของข้อผิดพลาด, เช่น การล้นของบัฟเฟอร์ และข้อผิดพลาดแบบออฟ-บาย-วัน
ในบริบทการพัฒนาสมัยใหม่, เฉพาะอย่างยิ่งที่เน้นความปลอดภัยและความอุ่นใจ, ภาษาที่ประสบความสำเร็จในการทำให้การดำเนินการระดับต่ำเหล่านี้เป็นที่น่าสนใจอาจเป็นที่ต้องการสำหรับงานการจัดการสตริง อย่างไรก็ตาม, การเข้าใจและใช้เทคนิคของ C ยังคงมีค่าไม่ว่าในสถานการณ์ที่ต้องการการปรับแต่งประสิทธิภาพอย่างละเอียดหรือการทำงานในสภาพแวดล้อมที่ความเรียบง่ายและความเร็วของ C มีความสำคัญมาก