วันจันทร์, กันยายน 14, 2552

DTS04-14/07/2009

สรุป Set and String

โครงสร้างข้อมูลแบบเซต (Set) เป็นโครงสร้างที่ข้อมูลแต่ละตัวไม่มีความสัมพันธ์กันเลย

ตัวดำเนินการของเซ็ต

-Set intersection การซ้ำกัน

-Set union การรวมกัน

-Set difference ความแตกต่าง

เช่น สมาชิกในห้อง 323 เป็น union กัน เพราะมีตอนเรียน A และตอนเรียน Bแต่ไม่เป็น intersection กัน เพราะคนๆหนึ่งไม่สามารถอยู่ในอีกห้องหนึ่งได้

สตริง String) หรือ สตริงของอักขระ เป็นข้อมูลที่ประกอบด้วยตัวอักษร ตัวเลข หรือเครื่องหมายสตริงในภาษา C ก็คือ อาร์เรย์ของตัวอักษร ที่มีข้อมูลชนิดตัวอักษรเรียงกันไป แต่จะต้องมีจุดสิ้นสุดด้วย โดยจะใช้ตัวอักษรวางหรือ Null Character เป็นจุดสิ้นสุดของสตริง ซึ่งจะต่างจากอาร์เรย์ปกติที่ไม่ต้องมีจุดสิ้นสุดของอาร์เรย์

การเก็บข้อมูลของสตริง

การเก็บข้อมูลของสตริงนั้น จะมีการเก็บข้อมูลอยู่ 2 ส่วน ส่วนแรกจะเป็นข้อมูลตัวอักษรโดยเก็บเรียงกันไป แบะส่วนที่ 2 จะเก็บจุดสิ้นสุดของสตริง ซึ่งจุสิ้นสุดของสตริงจะใช้ Null Characterหรือ ‘\0’ตัวอักษรที่เก็บอยู่ในหน่วยความจำ ข้อมูลชนิด

ตัวอักษรต้องการหน่วยความจำเพียง 1 ส่วน ส่วนข้อมูลชนิดสตริงตัวอักษร 1 ตัว ต้องการหน่วยความจำ 2 ส่วน ส่วนแรกใช้เก็บข้อมูล และส่วนที่สองใช้เก็บจะสิ้นสุดของสตริง

char a[ ]={‘H’, ‘E’, ‘L’, ‘L’, ‘O’, ‘\0’};

char a[ ]=“HELLO”;

จะรู้ได้อย่างไรว่าตัวไหนเป็น Character ตัวไหนเป็น String ดูได้จาก Single quote กับ double quote = “”double quote หรือฟันหนู หรืออัญประกาศ หรือเขาคู่ หรือเครื่องหมายคำพูดsingle quote หรือ apostrophe หรือฝนทอง หรือเขาเดี่ยว(ความยาวของสตริงจพถูกกำหนดโดยขนาดของสตริง)

การกำหนดตัวแปรสตริง

ในการกำหนดตัวแปรของสตริง อาศัยหลักการของอะเรย์ เพราะ สตริงก็คืออะเรย์ของอักขระที่ปิดท้ายด้วย null character (\0) และมีฟังก์ชันพิเศษสำหรับทำงานกับสตริงโดยเฉพาะ

ฟังก์ชัน getch() ใช้รับตัวอักขระ 1 ตัวจากแป้นพิมพ์ แต่ขณะรับไม่แสดงทางจอภาพ

ฟังก์ชัน gets() เป็นฟังก์ชันใช้สำหรับรับข้อมูลชนิด Stringหรือข้อความซึ่งป้อนทางแป้นพิมพ์รับข้อมูลที่เป็นข้อความจากเป็นฟังก์ชันที่ใช้ในการแป้นพิมพ์เข้ามาเก็บไว้ในตัวแปรแบบอาเรย์ การใช้ฟังก์ชัน gets(); จะต้องมีการประกาศตัวแปรแบบอาเรย์ และกำหนดจำนวนตัวอักษร ที่ต้องการป้อน โดยคอมพิวเตอร์จะจองพื้นที่ไว้ตามจำนวนตัวอักษร แต่จะป้อนได้น้อยกว่าที่จองไว้ 1 ตัว เพื่อให้ตัวแปรเก็บ 0 อีก 1รูปแบบการใช้งานฟังก์ชัน

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

#include”stdio.h”

main()

{char message[50];

printf(“ Enter a message(less than 49 characters)\n”);

gets(message);

printf(“ The message you entered is %s\n”,message);

}

ผลลัพธ์

Enter a message

(less than 49 characters)

Kiss and say good-byThe message you entered is Kiss and say good-bye

อะเรย์ของสตริง

ถ้าหากมีสตริงจำนวนมาก ก็ควรจะทำให้เป็นอะเรย์ของสตริง เพื่อที่จะเขียนโปรแกรมได้สะดวก การสร้างอะเรย์ของสตริง สามารถสร้างได้ทั้งแบบที่ให้ค่าเริ่มต้นและแบบที่กำหนดเป็นตัวแปรอะเรย์ของสตริงที่ยาวไม่เท่ากัน

ฟังก์ชันอื่นที่ใช้กับสตริง

การใช้สตริงนั้น จะมีฟังก์ชันในการกระทำกับสตริงอีกมาก จะช่วยให้การทำงานนั้นสะดวดมากยิ่งขึ้น ซึ่งการใช้ฟังก์ชันต่าง ๆ ที่เกี่ยวกับสตริงนั้นจะต้องนำเข้าไลบรารีไฟล์ strintg.h ด้วยเสมอ ซึ่งมีฟังก์ชันต่าง ๆ ดังนี้

ฟังก์ชั่นStrlen

เป็นฟังก์ชั่นที่ใช้ในการหาขนาดความยาวของข้อความนั้นว่ามีความยาวของข้อมูลกี่ตัวอักษรรูปแบบการใช้ฟังก์ชั่นint strlen (const char *string);ตัวอย่างด้านล่างนี้เป็นการใช้ฟังก์ชัน strlenx = strlen(“Sorapong”);หรือchar str[] = “Good Morning”;x = strlen(str);

คัดลอกสตริง ( strcpy, strncpy )

ในภาษา C จะมีฟังก์ชันในการคะดลอกสตริงหนึ่งไปใส่ในอีกสตริงหนึ่ง อยู่ 2 ฟังก์ชัน คือ strcpy และ strncpy ทั้ง 2 ฟังก์ชันนี้ จะเป็นฟังก์ชันในการคัดลอกสตริง แต่ในฟังก์ชันที่ 2 สามารถกำหนดความยาวของสตริงที่ต้องการจะคัดลอกได้ strcpy ฟังก์ชัน strcpy เป็นฟังก์ชันในการคัดลอกสตริงพื้นฐาน การทำงาน คือ จะทำการคัดลอกสตริงต้นทั้งหมด ซึ่งจะรวมไปถึง Null Character ด้วย ไปใส่ในสตริงปลายทาง

โดยการประกาศฟังก์ชัน strcpy เป็นดังนี้char*strcpy (char *to_string, const char *from_string);ตัวอย่างด้านล่างนี้เป็นตัวอย่างการใช้ฟังก์ชัน strcpy strcpy(s1,s2);

เปรียบเทียบสตริง (strcmp,strncmp)ฟังก์ชันในการเปรียบเทียบสตริงในภาษา c จะมีอยู่ 2 ฟังก์ชัน คือ ฟังก์ชัน strcmp และฟังก์ชัน strncmp ซึ่งฟังก์ชันทั้งสองจะทำการเปรียบเทียบเหมือนกัน แต่ฟังก์ชัน strncmp จะกำหนดความยาวในการเปรียบเทียบได้ ซึ่งผลของฟังก์ชันที่จะส่งกลับมาให้จะมีดังนี้

1. ถ้าทั้ง 2 สตริงเท่ากันจะส่งค่ากลับมาเป็น 0 โดยที่สตริงจะเท่ากัน ได้จะต้องมีความยาวที่เท่ากัน แบะมีตัวอักษรเหมือนกันทุกตัว

2. ถ้าสตริงตัวแรกน้อยกว่าสตริงตัวที่สอง จะส่งค่ากลับเป็นค่าที่น้อยกว่า 0 โดยสตริง s1 จะน้อยกว่า s2 ก็เมื่อทำการเปรียบเทียบไปที่ละตัวอักษร แล้วพบว่าตัวอักษรใน s1 มีค่าน้อยกว่าตัวอักษรของ s2 (โดยเทียบจากรหัส ACSII) หรือจุดสิ้นสุดของ s1 อยู่ก่อน s2

3. ถ้าสตริงตัวแรกมากกว่าสตริงตัวที่สอง จะส่งค่ากลับเป็นค่าที่มากกว่า 0 สตริง s1 จะน้อยกว่า s2 ก็เมื่อทำการเปรียบเทียบไปที่ละตัวอักษรแล้วพบว่าตัวอักษรใน s1 มีค่ามากกว่าตัวอักษรของ s2 (โดยเทียบจากรหัส ACSII)

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

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