บทที่ 3 วิธีการดําเนินการศ ... · 2010-10-07 · 4.1 นางนิธิวดีทับทิมศรีตําแหน ง
บทที่ 07 สตริง(string)
Click here to load reader
-
Upload
phichya-laemluang -
Category
Documents
-
view
3.912 -
download
4
Transcript of บทที่ 07 สตริง(string)
!
!
บทที่ 7สตริง(string)
♦ !ความหมายของ stringสตริง (string) หมายถึง ชุด(array)ของตัวอักขระ(character) ท่ีเรียงตอกัน สตริงจะเปนค ําหรือ
ขอความที่มีความหมาย ใน C++ ไมมีชนิดขอมูลประเภท string การก ําหนด string คือการก ําหนดเปนอารเรยของขอมูลชนิด char หลาย ๆ ตัวนํ ามาเช่ือมตอกันเปน string เชน character'C','o','m','p','u','t','e','r' เก็บไวในอารเรยรวมเปนขอมูล string ซึ่งจะไดขอความ "Computer" ขอมูลstring เปนไดทั้งคาคงที(่constant) และตัวแปร (variable)
♦ !การกํ าหนดคาคงท่ีให stringวิธีการกํ าหนดตัวแปรประเภท char ใหเปนอารเรยเพ่ือใหเก็บคาคงท่ี string มีรูปแบบดังน้ี1. ประกาศตัวแปรอารเรยประเภท char ไมระบุขนาดของอารเรย และกํ าหนดคา มีรูปแบบดัง
น้ีchar string_name[] = "string or text";โดยที่ char คือ ประเภทขอมูลของสตริงเปน characterstring_name[] คือ ช่ือของตัวแปรสตริง โดยที ่[ ] กํ าหนดใหเปนอารเรยของสตริง
ไมระบุขนาดของอารเรย C++ Compiler จะตรวจสอบและกํ าหนดขนาดจากคาคงท่ีดานขวาของเคร่ืองหมายเทากับ
"string or text" คือ ขอความหรือสายอักขระท่ีเปนคาคงท่ีของสตริง ตองเขียนไวในเคร่ืองหมาย " " เสมอ (ถาเปนคาคงที่ประเภท char คาคงท่ีเขียนไวในเคร่ืองหมาย ' ' ) เชน
char name[] = "Sirichai Namburi";char str[] = "C++ is OOP language";เน่ืองจากสตริงเปนอารเรยของ char จึงสามารถก ําหนดคาคงที่ไดอีกวิธีหนึ่ง คือchar name[] = {'S','i','r','i','c','h','a', 'i',' ','N','a','m','b','u','r', 'i','\0'};ส ําหรับ '\0' หมายถึงเครื่องหมาย null ซึ่งใชเปนรหัสจบสตริงในภาษา C++
2. ประกาศตัวแปรอารเรยประเภท char โดยระบุขนาดของอารเรยและกํ าหนดคา มีรูปแบบดังน้ี
char string_name[n] = " string or text";
!
ศิริชัย นามบุรี สตริง(string)
97
โดยที ่ n คือ ขนาดของอารเรย 1 มิติ เชนchar name[31]; //ตัวแปร name สามารถเกบ็อักขระได 30 ตัว ตัวท่ี 31 ใชเก็บ '\0'char location[50]; //ตัวแปร location สามารถเกบ็อักขระได 49 ตัว ตัวท่ี 50 ใชเก็บ '\0'
♦ !การรับคาสตริงจากคียบอรดใน C++ การรับคาสตริงจากคียบอรดเพ่ือเก็บไวในตัวแปร เชน กรอกชื่อนักศึกษา ที่อยูนัก
ศึกษา สามารถใช operator คือ >> (extraction or get from) รับขอมูลทางคียบอรดได และจะเพิ่ม'\0' เปนการจบสตริงใหโดยอัตโนมัติ
• ! ตัวอยางโปรแกรม str_exp1.cpp เปนการรับขอมูลทางคียบอรด ดวย cin>> โดยขณะกรอกหามเวนชองวาง และ setw() จากไฟล iomanip.h กํ าหนดความยาวของสตริงท่ีสามารกรอกได
/*Program : str_exp1.cpp Process : enter string from keyboard with non-space*/ #include <iostream.h> #include <conio.h> #include <iomanip.h>
void main() { char name[31],address[51]; clrscr(); cout<< "Please enter your information : \n"; cout<< "Your Name (1-30 char) : "; cin>>setw(31)>>name; cout<< "Your address (1-50 char): "; cin>>setw(51)>>address; //display clrscr(); cout<< "Your information : \n"; cout<< "Your Name : "<<name<<endl; cout<< "Your address : "<<address<<endl; getch();}
!
ศิริชัย นามบุรี สตริง(string)
98
• ! ตัวอยางโปรแกรม str_exp2.cpp แสดงการกรอกโดยใหสามารถรับขอมูลท่ีมีชองวาง(space) เขาไปเก็บในตัวแปร string ได ใหใช member function คือ cin::get() ตอไปนี้
/*Program : str_exp2.cpp Process : enter string with space from keyboard by cin::get() */ #include <iostream.h> #include <conio.h>
void main() { char name[31],address[51]; clrscr(); cout<< "Please enter your information : \n"; cout<< "Your Name (1-30 char) : "; cin.get(name,31); //display clrscr(); cout<< "Your information : "<<endl; cout<< "Your Name : "<<name<<endl;getch(); }
• ! ตัวอยางโปรแกรม str_exp3.cpp กรณีตองการกรอกขอมูลสตริงขนาดยาว หลายบรรทัดสามารถใช cin.get(variable,length,'code') เชน cin.get(resume,1000,']') เพ่ือกรอกขอมูลในลักษณะหลายบรรทัดเก็บไวในตัวแปร resume มีความยามขอความไมเกิน 1000 แตละบรรทัดจบดวยการกด enter และส้ินสุดการกรอกดวยรหัส ] ท่ีกํ าหนดไว ตอไปนี้
/*Program : str_exp3.cpp Process : enter string from keyboard by cin::get() */ #include <iostream.h> #include <conio.h> void main() { char resume[1000]; clrscr(); cout<< "Please enter your information : \n"; cout<< "Your resume (1-200 char) key ] stop enter: "<<endl; cin.get(resume,1000,']'); //stop enter with character ] //display clrscr(); cout<< "Your resume information : "<<endl<<resume; getch(); }
!
ศิริชัย นามบุรี สตริง(string)
99
• ! ตัวอยางโปรแกรม str_gets.cpp แสดงการใชฟงกชัน gets() จาก Header file ชื่อ stdio.hทํ าหนาท่ีรับคา string หลาย ๆ คร้ังตอกันไปทางคียบอรด แลวนํ ารายละเอียดใน stringท้ังหมดมาแสดงผล โดยเขียนแยกเปนฟงกชัน ดังนี้
/*Program : str_gets.cpp Process : input string from keyboard by gets() function from stdio.h */
#include <iostream.h>#include <conio.h>#include <stdio.h> //standard input/output function
//declaration prototype functionvoid input();void display();//declaration global variablechar code[9],name[30],address[80];
void main(){ clrscr();input(); clrscr();display();}void input(){ cout<<"Input a string information: \n"; cout<<"Code : "; gets(code); cout<<"Name: "; gets(name); cout<<"Address : "; gets(address);}void display(){ cout<<"Your string information : \n\a"; cout<<"Code : "<<code<<endl; cout<<"Name: "<<name<<endl; cout<<"Address : "<<address<<endl; getch();}
!
ศิริชัย นามบุรี สตริง(string)
100
♦ !อารเรย 2 มิติของ Stringขอมูลสตริงใน C++ หมายถึง ชุดอารเรย 1 มิติของขอมูลชนิด char น้ันเอง มีวิธีการก ําหนด
ดังไดกลาวมาแลว เชน char name[30]ถาตองการท ําขอมูลสตริงใหเปนชนิดอารเรย สามารถเก็บขอมูลพรอมกันไดหลาย ๆ สตริง
ตองก ําหนดโดยใชรูปแบบของ อารเรย 2 มิติ ชนิด char มีรูปแบบก ําหนดดังน้ีchar string_name[row][column];ซึ่ง string_name คือ ช่ือของอารเรยสตริง
[row] คือ จํ านวนสมาชิกในแนวแถวของสตริง[column] คือ ความยาวสูงสุดของสตริงในแตละรายการ
เชนchar name[5][31];ตัวแปร name สามารถเก็บขอความหรือสตริงได 5 รายการ แตละรายการมีความยาว
ไมเกิน 30 อักขระการกํ าหนดคาใหกับอารเรยของสตริงแตละรายการ ตองกํ าหนดผายฟงกชัน string copy ท่ี
กํ าหนดไวใน Header file ท่ีช่ือ string.h มีรูปแบบ ดังนี้
strcpy(string_variable , string_value);
โดยที ่string_variable คือ ตัวแปรท่ีเปนสตริง ใชเก็บคาที่คัดลอกมาจาก string_value ซึ่งอาจเปนคาคงท่ีอยูในเคร่ืองหมาย " " หรือเปนตัวแปรสตริงก็ได เชน
strcpy(name[0], "Sirichai");strcpy(name[1], "Sompong");strcpy(name[2], "Somsri");strcpy(name[3], name[2]);
สามารถก ําหนดคาของอารเรยสตริงในลักษณะ const ในโปรแกรม มีรูปแบบดังน้ีconst name[][30]={ "Sirichai","Sompong","Somsri","Sombat","Somsak"};
!
ศิริชัย นามบุรี สตริง(string)
101
• ! ตัวอยางโปรแกรม str_exp6.cpp แสดงการกํ าหนดคาคงท่ีใหอารเรยสตริง name[5][31]และแสดงผลขอมูลในอารเรย ดังนี้
/*Program : str_exp6.cpp Process : set constant of array string and display */
#include <iostream.h> #include <conio.h>
void main() { const char name[5][31]={"Sirichai","Sompong","Somsri","Somsak","Sombat"}; int i; clrscr(); //display clrscr(); for(i=0;i<=4;++i) { cout<<name[i]<<endl; } getch(); }
• ! ตัวอยางโปรแกรม str_exp7.cpp แสดงการรับขอมูลทางคียบอรดเก็บไวตัวแปรอารเรยสตริง และแสดงผลขอมูลในอารเรยสตริงทางจอภาพ
/*Program : str_exp7.cpp Process : enter constant to array string and display */ #include <iostream.h> #include <conio.h> void main() { char name[5][31]; int i; clrscr(); cout<<"Please enter student name 5 persons : "<<endl; for(i=0;i<=4;++i) //input string { cout<<"#"<<i+1<<" "; cin>>name[i]; }
!
ศิริชัย นามบุรี สตริง(string)
102
//display clrscr(); cout<<"Name of student \n\a"; for(i=0;i<=4;++i) { cout<<"#"<<i+1<<" "<<name[i]<<endl; } getch(); }
♦ !ฟงกชันคัดลอกและนับความยาวของสตริงใน string.h• ! การคัดลอกสตริง หมายถึงการคัดลอกคาคงที่ของสตริงที่เปนตนฉบับ (source) ไปไวอีกตัวแปรสตริงหน่ึงเรียกวา สตริงปลายทาง (destination) มีรูปแบบฟงกชันดังนี้
strcpy(destination,source) เชน strcpy(name,"Sompong");• ! การนับความยาวของสตริง วามีกี่ตัวอักขระใชฟงกชัน strlen(string) เชน
n = strlen(name); หรือ n= strlen("Somsri");
• ! ตัวอยางโปรแกรม str_exp8.cpp แสดงการใชฟงกชัน strcpy() และ strlen()
/*Program : str_exp8.cpp Process : using function strcpy() and strlen()*/
#include <iostream.h>#include <conio.h>#include <iomanip.h> //for setw()#include <string.h> //for strcpy(),strlen()
void main() { char sname[31]; char dname[31]; int n; clrscr(); cout<< "Please enter your information : \n"; cout<< "Your Name (1-30 char) : "; cin>>setw(31)>>sname; strcpy(dname,sname); n=strlen(dname);
!
ศิริชัย นามบุรี สตริง(string)
103
//display clrscr(); cout<< "Your information : \n"; cout<< "Your Name : "<<dname<<endl; cout<< "Your name long "<<n<<" characters"; getch(); }
♦ !ฟงกชัน strncpy() , strcat() และ strcmp() ใน string.h• ! ฟงกชัน strncpy(destination,source,n) ใชคัดลอกของสตริงจาก source ไปไวยัง
destination โดยที ่ n คือ จํ านวน character ที่จะท ําการคัดลอกจาก source ไปยังdestination โดยเร่ิมนับจาก character ตัวแรก
• ! ฟงกชัน strncat(t,s,n) ใชในการคัดลอกอักขระหรือขอความจาก string s มาเช่ือตอกับstring t จํ านวน n ตัว แลวเก็บไวใน string t
• ! ฟงกชัน strcmp(string1,string2) ใชเพื่อเปรียบเทียบ string1 กับ string2 ถาผลการเปรียบเทียบเปน 0 แสดงวาเทากัน ถาผลการเปรียบเทียบมากกวา 0 แสดงวา string1>string2และถาผลเปรียบเทียบนอยกวา 0 แสดงวา string1<string2
• ! ตัวอยางโปรแกรม strn_cat.cpp แสดงการการใชฟงกชัน strncpy(), strncat() และstrcmp()
/*Program: strn_cat.cpp process: display used function strncpy(),strncat(),strcmp() from string.h*/#include <iostream.h>#include <conio.h>#include <string.h>
void main(){ char name[20]="Sirichai Namburi"; char std[20]="Sompong Deemak"; char str[40]="Name: ",temp[30]=""; clrscr(); //used strncpy() strncpy(temp,name,12); cout<<temp<<endl; strncpy(temp+12,"buri",10);
!
ศิริชัย นามบุรี สตริง(string)
104
cout<<temp<<endl<<endl; //used strncat() cout<<str<<endl; strncat(str,std,7); cout<<str<<endl; cout<<str<<endl; strncat(str,name,8); cout<<str<<endl<<endl; //used strcmp cout<<strcmp("Som","Som")<<" "<<"Som == Som"<<endl; cout<<strcmp(std,"Sombat")<<" "<<std<<">"<<"Sombat"<<endl; cout<<strcmp(std,"Somsak")<<" "<<std<<"<"<<"Somsak"<<endl; getch();}
♦ !แบบฝกหัดทายบท
1. ใหเขียนโปรแกรมเพื่อสรางฟงกชันจัดการกับขอมูลแบบสตริง ดังน้ี- Length( ) ท ําหนาที่ในการนับจ ํานวนอักขระใน string และพิมพความยาวของสตริงบนจอภาพ- Center() ท ําหนาที่ในการพิมพสตริงกลางจอภาพ ณ ตํ าแหนงท่ี cursor ชี้อยู- Convert() ท ําหนาที่ในการจัดเรียงอักขระในสตริงจากตัวสุดทายมายังตัวแรก
2. ใหเขียนโปรแกรมเพ่ือรับขอมูล รหัส ชื่อนักศึกษา คะแนนระหวางภาค คะแนนปลายภาค ของนักศึกษาจํ านวน 10 คน และแสดงผลขอมูลทั้งหมด พรอมคะแนนรวมของนักศึกษาแตละคนโดยเขียนโปรแกรมแยกเปนฟงกชันตามความเหมาะสม
3. ใหเขียนโปรแกรมรับขอมูลสตริง จํ านวน 5 ขอความ จัดเรียงขอมูลสตริงทั้ง 5 ขอความนั้นจากนอยไปมาก และจากมากไปนอย พรอมแสดงทางจอภาพ โดยสรางฟงกชันในการท ํางานใหเหมาะสม