สายอักขระและ การประมวลผลสายอักขระ (String and String manipulation)

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Introduction to C Introduction to C.
Advertisements

โครงสร้างโปรแกรมภาษา C
สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์
ตัวแปรชุด การเขียนโปรแกรมภาษาคอมพิวเตอร์ 1
การเขียนโปรแกรมด้วยคำสั่งเบื้องต้น
ข้อมูลชนิดสตริง String บทที่ 8
ข้อมูลชนิดอาร์เรย์ Array (บทที่ 5)
Introduction to C Programming
ครั้งที่ 8 Function.
BC322 ครั้งที่ 13 Array 2 มิติ BC322 Computer Programming-Array Processing.
Control Statement if..else switch..case for while do-while.
การรับค่าและแสดงผล.
Data Type part.II.
หลักการโปรแกรม 1 Lecture 3: ตัวแปร, นิพจน์คณิตศาสตร์, การคำนวณทางคณิตศาสตร์,การดำเนินการกับสายอักขระ.
6. โครงสร้างข้อมูลแบบแฟ้ม
LAB # 5 Computer Programming 1 1.
Week 6 ประกาศค่าตัวแปร.
CE 112 บทที่ 5 การทำซ้ำในภาษา C
รับและแสดงผลข้อมูล.
โครงสร้างภาษาซี.
ตัวชี้ P O I N T E R Created By Tasanawan Soonklang
ปฏิบัติการครั้งที่ 9 ฟังก์ชัน.
คำสั่งควบคุมการทำงาน
ตัวแปรชุด.
Lecture no. 10 Files System
การประกาศตัวแปร “ตัวแปร” คือสิ่งที่เราสร้างขึ้นมาเพื่อใช้เก็บค่าต่างๆและอ้างอิงใช้งานภายในโปรแกรม ตามที่เรากำหนดขึ้น การสร้างตัวแปรขึ้นมาเราเรียกว่า.
Arrays.
Week4 Data types, Variables, Operators and Input/output (ต่อ)
บทที่ 6 ตัวแปรอาร์เรย์ (Array of Variable)
C Programming Lecture no. 6: Function.
Functions Standard Library Functions User-defined Functions.
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
ตัวแปรชุดของอักขระ String
ข้อมูลชนิดอาร์เรย์ ประเภทของข้อมูลที่ผ่านมาส่วนใหญ่ในตอนต้นๆจะเป็นข้อมูลเดี่ยว โดยตัวแปรหนึ่งตัวสามารถเก็บข้อมูลได้หนึ่งตัว ถ้าหากต้องการเก็บข้อมูลหลายตัวจะต้องประกาศตัวแปรหลายตัว.
บทที่ 11 การเขียนโปรแกรมภาษาซี
บทที่ ไลบรารีฟังก์ชัน
หน่วยที่ 14 การเขียนโปรแกรมย่อย
อาร์เรย์และข้อความสตริง
สตริง (String).
การเขียนโปรแกรมภาษาซี
Chapter 4 คำสั่งควบคุมทิศทาง
ตัวแปรกับชนิดของข้อมูล
ง30212 การเขียนโปรแกรมภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ฟังก์ชัน ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ ศูนย์คอมพิวเตอร์
ฟังก์ชันรับข้อมูล ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
แถวอักขระ (string) ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
แถวลำดับ (array) ง40202 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
Week 2 Variables.
Week 12 Engineering Problem 2
การประมวลผลสายอักขระ
Computer Programming for Engineers
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
คำสั่งเงื่อนไข (Condition Statement)
คำสั่งรับค่า และ แสดงผลค่า. คำสั่งรับ - แสดงผล 1. printf( ) เป็น ฟังก์ชันที่ใช้ในการ แสดงผลข้อมูลที่อยู่ในตัว แปร ค่าคงที่ นิพจน์ออกมา ทางจอภาพ.
โครงสร้างภาษาซี #include <stdio.h> void main() {
บทที่ 10 สตริง.
คำสั่งเกี่ยวกับการรับ และแสดงผล
บทที่ 2 แนวคิดในการเขียนโปรแกรม. ขั้นตอนการ พัฒนาโปรแกรม ในการพัฒนาโปรแกรมมีขั้นตอนหลัก 5 ขั้นตอน ซึ่งไม่ว่าจะทำการพัฒนาโปรแกรม ครั้งใดจะต้องปฏิบัติตามขั้นตอนเหล่านี้
หลักการเขียนโปรแกรม ( )
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
โครงสร้าง ภาษาซี.
บทที่ 7 เงื่อนไขในภาษาซี
บทที่ 11 การจัดการข้อมูลสตริง
1 Functions กนกวรรธน์ เซี่ยงเจ็น สำนักวิชาเทคโนโลยีสารสนเทศ และการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา.
1 สตริง (String) การประกาศค่าตัวแปรสตริง การกำหนดค่าสตริง การอ้างอิงตัวอักษรแต่ละตัวในสตริง ฟังก์ชั่นที่ใช้ในการจัดการสตริง ฟังก์ชั่นในการเปลี่ยนรูปแบบของสตริง.
L/O/G/O อาร์เรย์ และฟังก์ชั่นจัดการ สตริง. วัตถุประสงค์ เข้าใจหลักการของอาร์เรย์ และประยุกต์ใช้ งานได้ เปรียบเทียบความแตกต่างของอาเรย์แบบต่าง.
รายการ (Lis t) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong.
Operator of String Data Type
ใบสำเนางานนำเสนอ:

สายอักขระและ การประมวลผลสายอักขระ (String and String manipulation) ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยขอนแก่น

สายอักขระ (string) คือ array of character หรือชุดของตัวอักขระหลายๆตัวที่มาต่อกัน สิ่งที่ได้อาจเป็นคำ หรือประโยค โดยเมื่อจบชุดของตัวอักขระแล้วจะปิดท้ายด้วย ‘\0’หรือ NULL เสมอ เช่น Hello , cs112_summer ‘H’ ‘e’ ‘l’ ‘o’ ‘\0’ ‘c’ ‘s’ ‘1’ ‘2’ ‘_’ ‘u’ ‘m’ ‘e’ ‘r’ ‘\0’

การประกาศตัวแปร string ใช้การประกาศ array of character การประกาศจะต้องพิจารณาความยาวข้อมูลที่จะนำมาเก็บ หรือต้องมีการกำหนดขนาดของ array +1 สำหรับเก็บ ‘\0’ เช่น ต้องการเก็บคำว่า “Hello” มีความยาว 5 อักขระ char str[6]; ‘H’ ‘e’ ‘l’ ‘o’ ‘\0’

การประกาศตัวแปร string (ต่อ) char str1[]=“cs112_summer”; compiler ของภาษาซี จะจัดการนำ string ใส่ใน arrayให้อัตโนมัติ จะได้ดังนี้ ‘c’ ‘s’ ‘1’ ‘2’ ‘_’ ‘u’ ‘m’ ‘e’ ‘r’ ‘\0’

การประกาศตัวแปร string (ต่อ) char str2[][7]={{“pong”},{”cs112”},{”cmu”}}; หรือ char str3[][7]={“pong”,”cs112”,”cmu”}; ระบุความยาวสูงสุดของข้อมูลสมาชิก ระบุข้อมูลสมาชิกแต่และตัวในอะเรย์

การรับค่าและแสดงผลของ string การรับค่าของตัวแปร string จาก standard input ฟังก์ชัน scanf() **ห้ามมี space bar ระหว่างข้อมูลที่ป้อน scanf(“%s”,str); str คือ ตัวแปร string (array of character) ฟังก์ชัน gets() **จะหยุดรับเมื่อกดenter มี space bar ได้ gets(char *s); s คือ ตัวแปร string

การรับค่าและแสดงผลของ string (ต่อ) การแสดงผลค่าของตัวแปร string ออกที่standard output ฟังก์ชัน printf() printf(“%s”,str); str คือ ตัวแปร string หรือ string ที่ต้องการแสดงผล ฟังก์ชัน puts() int puts(char *s); s คือ ตัวแปร string หรือ string ที่ต้องการแสดงผล

การประมวลผลสายอักขระ (string manipulation) สามารถใช้ความรู้เกี่ยวกับเรื่อง control มาจัดการกับ string ได้ นำอักขระพิเศษ ‘\0’ ที่ปิดท้าย string มาใช้ประโยชน์ในการตรวจสอบ เช่น - นับความยาวของ string - เปรียบเทียบ string 2 ชุด - ต่อ string 2 ชุด ให้เป็น 1 ชุด

นับความยาวของ string #include <stdio.h> void main( ) { char name[] = "Hello" ; int count_str(char s[ ]); printf("Length is %d",count_str(name)); } /* end main( ) */ int count_str(char s[ ]) int count=0, i ; while (s[i] != '\0') { count++; i++; } return count;

ต่อ string 2 ชุด เข้าด้วยกัน #include <stdio.h> #include <conio.h> void main() { char *s1 = "ABCDEF"; char *s2 = "XYZ"; void cat_str(char *str1, char *str2); printf ("Before concatenate s1= %s s2= %s \n",s1,s2); cat_str(s1,s2); printf ("After concatenate s1= %s s2= %s \n",s1,s2); } void cat_str(char *str1, char *str2) { int i=0,j=0; while (str1[i] != '\0') { i++; while (str2[j] != '\0') { str1[i] = str2[j]; j++; str1[i] = '\0';

ฟังก์ชันในการจัดการกับstring ในภาษาซี มีการสร้างฟังก์ชันเพื่อนำมาจัดการกับ string โดยผู้ใช้จะต้อง เรียกใช้ไลบารี string.h ฟังก์ชันต่างๆ เกี่ยวกับ string ดังนี้ strcmp(), strcpy(), strlen(), strcat(), strncpy() เป็นต้น

ฟังก์ชัน strcmp() ทำหน้าที่เปรียบเทียบ string 2 ชุด Syntax: int strcmp(char *str1, char *str2); str1, str2 คือ ตัวแปร string ที่นำมาเปรียบเทียบ การเปรียบเทียบ ถ้า str1< str2 ได้ผลลัพธ์น้อยกว่าศูนย์ ถ้า str1 = str2 ได้ผลลัพธ์เท่ากับศูนย์ ถ้า str1 > str2 ได้ผลลัพธ์มากกว่าศูนย์ ผลลัพธ์ที่ได้จะส่งกลับมาในรูปแบบจำนวนเต็ม

ตัวอย่าง ผลลัพธ์ buffer2 is greater than buffer1 #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc"; int ptr; ptr = strcmp(buf2, buf1); if (ptr > 0) printf("buffer 2 is greater than buffer 1\n"); else printf("buffer 2 is less than buffer 1\n"); ptr = strcmp(buf2, buf3); printf("buffer 2 is greater than buffer 3\n"); printf("buffer 2 is less than buffer 3\n"); return 0; } ผลลัพธ์ buffer2 is greater than buffer1 buffer2 is less than buffer3

ฟังก์ชัน strcpy() Syntax: char * strcpy(char *dest, char *src); คัดลอกข้อมูลจาก string หนึ่ง ไปยังอีก string หนึ่ง โดย string ที่เป็นตัวหลักจะต้องมีขนาดที่มากกว่าหรือเท่ากับ string ที่จะนำมาคัดลอก ซึ่งการคัดลอกจะคัดลอกทีละอักขระจนกระทั่งพบอักขระ ‘\0’ จึงจะหยุดคัดลอก และจะไม่คัดลอก ‘\0’ ไปด้วย Syntax: char * strcpy(char *dest, char *src); dest คือ ตัวแปร string หรือ พอยน์เตอร์ชนิดอักขระ ปลายทาง src คือ ตัวแปร string หรือ พอยน์เตอร์ชนิดอักขระ ต้นทาง

ตัวอย่าง ผลลัพธ์ abcdefghi #include <stdio.h> #include <string.h> int main(void) { char string[10]; char *str1 = "abcdefghi"; strcpy(string, str1); printf("%s\n", string); return 0; } ผลลัพธ์ abcdefghi

ฟังก์ชัน strcat() Syntax: char * strcat(char *dest, char *src); นำ string 2 ชุดมาเชื่อมต่อกัน ผลลัพธ์ที่ได้จะได้ string ที่มีความยาวเท่ากับstring ทั้ง 2 ชุดมารวมกัน Syntax: char * strcat(char *dest, char *src); dest คือ ตัวแปร string หรือ พอยน์เตอร์ชนิดอักขระ ปลายทางที่เก็บผลลัพธ์ จากการเชื่อมต่อ string src คือ ตัวแปร string หรือ พอยน์เตอร์ชนิดอักขระ ต้นทางที่นำ string ไปเชื่อมต่อ

ตัวอย่าง ผลลัพธ์ Turbo C++ #include <string.h> #include <stdio.h> int main(void) { char destination[25]; char *blank = " ", *c = "C++", *turbo = "Turbo"; strcpy(destination, turbo); strcat(destination, blank); strcat(destination, c); printf("%s\n", destination); return 0; } ผลลัพธ์ Turbo C++

ฟังก์ชัน strlen() Syntax: int strlen(str); นับความยาวของ string ที่ต้องการ Syntax: int strlen(str); str คือ ตัวแปร string ที่ต้องการนำมานับความยาวหรือนับจำนวนอักขระของ string โดยการนับนี้จะไม่นับอักขระพิเศษ ‘\0’ และการนับจะสิ้นสุดเมื่อเจอ ‘\0’ ผลลัพธ์ที่ได้จะส่งกลับมาเป็นเลขจำนวนเต็ม

ตัวอย่าง ผลลัพธ์ 21 #include <stdio.h> #include <string.h> int main(void) { char *string = "Borland International"; printf("%d\n", strlen(string)); return 0; } ผลลัพธ์ 21

ฟังก์ชัน strncpy() Syntax: คัดลอก string หนึ่ง ไปยังอีก string หนึ่ง โดยสามารถระบุความยาวมากที่สุดของ string ที่ต้องการคัดลอกไปยังปลายทางได้ Syntax: char * strcnpy(char *dest, char *src, size_t maxlen); dest คือ string ปลายทางที่จะนำ stringที่ต้องการมาคัดลอกลงไป src คือ string ต้นทางที่ต้องการคัดลอก maxlen คือ จำนวนความยาวมากที่สุดของ string ที่ต้องการคัดลอก

ตัวอย่าง ผลลัพธ์ abc #include <stdio.h> #include <string.h> int main(void) { char string[10]; char *str1 = "abcdefghi"; strncpy(string, str1, 3); string[3] = '\0'; printf("%s\n", string); return 0; } ผลลัพธ์ abc

แบบฝึกหัด จงเขียนโปรแกรมเรียกใช้ฟังก์ชัน catn_str( ) ซึ่งทำหน้าที่ต่อ string 2 ชุดเข้าด้วยกันระบุจำนวนอักขระที่นำไปต่อได้ โดยห้ามใช้ฟังก์ชันสำเร็จรูป จงเขียนโปรแกรมเรียกใช้ฟังก์ชัน cmp_str( ) ซึ่งทำหน้าที่เปรียบเทียบ string 2 โดยห้ามใช้ฟังก์ชันสำเร็จรูป จงเขียนโปรแกรมเรียกใช้ฟังก์ชัน count_word( ) ซึ่งทำหน้าที่นับคำในประโยค(string)