Docstoc

lesson7

Document Sample
lesson7 Powered By Docstoc
					!

                                            บทที่ 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 คือ ประเภทขอมูลของสตริงเปน character
                                   ่
             string_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";

!
!                                                  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 function
void input();
void display();
//declaration global variable
char 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 ขอความนั้น
   จากนอยไปมาก และจากมากไปนอย พรอมแสดงทางจอภาพ โดยสรางฟงกชนในการ    ั
   ทํางานใหเหมาะสม




ศิริชัย นามบุรี                                                              สตริง(string)