22 กุมภาพันธ์ 2554

ตัวอย่าง การตัดตัวอักษร (substring) ในภาษา C (ไม่ใช่ C++ นะจ๊ะ)

ไม่ได้ Update Blog นานเลย ขอ ดราม่านิดนึง ^^'

หลังจากเรียนวิชา Unix Tools and Programming ไปเรียบร้อยและได้โดนสั่งงาน Project เทอมให้ทำโปรแกรม Client Server โดยมีเงื่อนไขว่า ให้ใช้ภาษา C และผมเลยติดปัญหาที่ว่า ผมต้องการติดคำในภาษา C เช่นมี ABCDEF จะเอาแค่ CDE เก็บใส่ในตัวแปรใหม่ เริ่มแรกก็ได้ลองหาว่ามี libary มีให้ใช้ไหม

เลยหาข้อมูลมาดังนี้
1. ลองหา google เห็นว่าไม่มีข้อมูล เสียเวลาประมาณ 1 วัน (หรือผมหาไม่เจอ = =)
2. ถามพี่ๆที่คณะ ก็ไม่รู้ เสียเวลาไปอีก 1 วัน
3. เลยถามพี่ๆ ใน facebook ที่จบไปแล้วว่ามันมีหรือไม่ เสียเวลาไปอีก 1 วัน

โดยได้คำตอบว่ามันไม่มีให้ใช้ และได้คำแนะนำว่าให้ลองเขียนเอง (ช่วงสอบด้วย โอ้ว แม่เจ้า !!!)
ช่วงแรกๆผมลองดูก็ Segmentation fault นั่งงมอยู่เกือบวัน ไม่ได้สักทีเลยไปอ่านหนังสือสอบก่อน


หลังจากสอบเสร็จก็กลับห้องมาลองดูอีกสักตั้ง โดยลองมั่วๆ pointer malloc char ไปเรื่อยๆ ใช้เวลาประมาณ 2 ชั่วโมง ในที่สุดผมก็ทำได้ !!!

ตัวอย่างโปรแกรม

#include <stdio.h>
#include <string.h>

char* substring(int start,int end,char data[]); //function สำหรับใช้ตัดคำ

int main()
{
    char data[]="ABCDEFG",new_data[10];
    char *new_data_p;
    
    printf("data = %s \n",data); //แสดงข้อมูลก่อนที่จะตัด
    
    new_data_p = substring(3,5,data); //ทำการตัดคำ เอาตัวอักษรที่ 3 ถึง 5
    
    strcpy(new_data,new_data_p); //นำข้อมูลที่ตัดแล้วมาใส่ในตัวแปรตัวใหม่
    printf("new_data = %s \n",new_data); //แสดงข้อมูลที่แล้ว
    free(new_data); //คืนค่าหน่วยความจำให้กับ OS
    
    return 0;   
}

char* substring(int start,int end,char data[])
{
    int i;
    char *new_data,*current;
    new_data = malloc((end-start+2) * sizeof(char)); //ทำการจองพื้นที่ในหน่วยความจำ
    current = new_data;

    for(i=start-1;i<end;i++) //วน loop copy ทีละตัวอักษร
    {
      *current = data[i];
      current++;
    }
    *current = '\0'; //ปิด string
    
    return new_data;
}

ลองไปศึกษาดูได้นะครับ เป็นการใช้ประโยชน์จาก Pointer ในอีกรูปแบบหนึ่ง Pointer จงเจริญ!!!


ไม่มีความคิดเห็น:

แสดงความคิดเห็น