Ο τύπος string - Διαχείρισης Πληροφοριών

Download Report

Transcript Ο τύπος string - Διαχείρισης Πληροφοριών

ÅñãáóôÞñéï 3
O ôýðïò string (ÁíôéêåéìåíïóôñáöÞò
Ðñïãñáììáôéóìüò)
ôìÞìá: Äéá÷åßñéóçò Ðëçñïöïñéþí, ÔÅÉ ÊáâÜëáò
äéäÜóêùí: Äñ. Âáóßëåéïò ×áôæÞò, Åð. ÊáèçãçôÞò
ôï êåßìåíï áõôü âñßóêåôáé óôï äéáäßêôõï óôç óåëßäá www.it.teithe.gr/∼chatzis
3.1 Óôü÷ïé
Ïé âáóéêïß ôýðïé ìåôáâëçôþí ðïõ õðïóôçñßæåé ç C++ åßíáé ïé åîÞò: bool, int, float, double,
char. Ïé ôÝóóåñéò ðñþôïé áöïñïýí áñéèìçôéêÞò ìïñöÞò ðëçñïöïñßá êáé ìüíï ï ôýðïò char
ìïíôåëïðïéåß ôïõò ÷áñáêôÞñåò. Ïé Üíèñùðïé üìùò ÷ñçóéìïðïéïýí ðÜñá ðïëý óõ÷íÜ ëÝîåéò ôéò
ïðïßåò êÜèå ãëþóóá ðñïãñáììáôéóìïý áíôéìåôùðßæåé óáí äéáôåôáãìÝíá óýíïëá áðü ÷áñáêôÞñåò.
Åðßóçò, ðïëëÝò ëÝîåéò ìáæß áðïôåëïýí ôéò öñÜóåéò ôéò ïðïßåò êÜèå ãëþóóá ðñïãñáììáôéóìïý
áíôéìåôùðßæåé óáí äéáôåôáãìÝíá óýíïëá áðü ëÝîåéò. ÏõóéáóôéêÜ ëïéðüí äïìéêü óôïé÷åßï ôùí
ëÝîåùí êáé ôùí öñÜóåùí áðïôåëåß ï ÷áñáêôÞñáò. Óôï åñãáóôÞñéï áõôü ðáñïõóéÜæïíôáé:
• ïé ïñìáèïß (string) ÷áñáêôÞñùí ðïõ óêïðü Ý÷ïõí íá äéåõêïëýíïõí ôçí ÷ñçóéìïðïßçóç ôçò
ãëþóóáò C++ ãéá ôçí åðåîåñãáóßá ðëçñïöïñßáò óå ìïñöÞ ëÝîåùí êáé öñÜóåùí. Ôá string
ìïíôåëïðïéïýíôáé óôç C++ ìå äýï ôñüðïõò.
• Ï ðñþôïò ôñüðïò Ý÷åé êëçñïíïìçèåß áðü ôçí ãëþóóá C êáé åîáêïëïõèåß íá éó÷ýåé ãéá
ëüãïõò óõìâáôüôçôáò. Áðïèçêåýåé Ýíá string ÷ñçóéìïðïéþíôáò Ýíá ðßíáêá ôýðïõ char êáé
ôï äéá÷åéñßæåôáé ÷ñçóéìïðïéþíôáò äåßêôåò óå ôýðï char.
• Óôç C++ üìùò Ý÷åé äçìéïõñãçèåß ï ôýðïò string, ï ïðïßïò äåí áðïôåëåß âáóéêü ôýðï, áëëÜ
õðÜñ÷åé óôçí âéâëéïèÞêç ôçò ãëþóóáò. Ï ôýðïò string ìïíôåëïðïéåß ôá string óáí ëßóôåò
áðü ÷áñáêôÞñåò.
3.2 Áðáñáßôçôï Õëéêü
ÊÜèå öïéôçôÞò ïöåßëåé íá Ý÷åé ìáæß ôïõ:
1
• ôç äéóêÝôá ìå ôïõò êþäéêåò ôùí ðñïçãïýìåíùí åñãáóôçñßùí.
• ôéò óçìåéþóåéò Þ ôï âéâëßï ôïõ ìáèÞìáôïò (åöüóïí Ý÷ïõí ìïéñáóôåß).
• õëéêü ãéá íá ìðïñåß íá êñáôÜ óçìåéþóåéò.
3.3 Ôá string óå ðßíáêåò ÷áñáêôÞñùí
Áöïý ìßá ëÝîç áðïôåëåßôáé áðü ÷áñáêôÞñåò Ýíáò ðñþôïò ôñüðïò íá áðïèçêåýóïõìå ìßá ëÝîç
åßíáé íá ÷ñçóéìïðïéÞóïõìå Ýíáí ðßíáêá ôýðïõ char. Êáô’åðÝêôáóç êáé ìßá öñÜóç áðïôåëåßôáé
áðü ÷áñáêôÞñåò ïðüôå åðßóçò ìðïñåß íá áðïèçêåõèåß óå Ýíáí ðßíáêá ôýðïõ char. ÅðåéäÞ ç
÷ñÞóç ðëçñïöïñßáò óå ìïñöÞ ëÝîåùí Þ öñÜóåùí åßíáé ðïëý óõ÷íÞ, ç C++ ðáñÝ÷åé áñêåôÝò
äéåõêïëýíóåéò ãéá ôçí áñ÷éêïðïßçóç êáé ôçí åðåîåñãáóßá ðéíÜêùí áõôïý ôïõ ôýðïõ. Åðßóçò
÷ñçóéìïðïéåßôáé ç Ýííïéá ôïõ ïñìáèïý ÷áñáêôÞñùí (string). ¸íá string åßíáé ìßá áëëçëïõ÷ßá
÷áñáêôÞñùí ðïõ ôåëåéþíåé ìå ôïí ÷áñáêôÞñá ’\0’. Ï ÷áñáêôÞñáò áõôüò åßíáé ï ÷áñáêôÞñáò ìå
ASCII êþäéêá 0 êáé èåùñåßôáé ìÝñïò ôïõ string.
1. Óôï ðáñÜäåéãìá ðïõ áêïëïõèåß äçëþíïõìå Ýíáí ðßíáêá ôýðïõ char 30 èÝóåùí êáé ôïí áñ÷éêïðïéïýìå ìå ôéò óôáèåñÝò ÷áñêôÞñùí ðïõ äçìéïõñãïýí ôçí öñÜóç "my name" óôéò åðôÜ
ðñþôåò èÝóåéò ôïõ ðßíáêá. Óýìöùíá ìå ôá üóá éó÷ýïõí ãéá ôçí áñ÷éêïðïßçóç ðéíÜêùí ïé
õðüëïéðåò èÝóåéò ôïõ ðßíáêá ëáìâÜíïõí ôçí ôéìÞ 0, ç ïðïßá áíôéóôïé÷åß óôïí ÷áñáêôÞñá
ìå êþäéêá ASCII ôçí ôéìÞ 0 äçëáäÞ ôçí óôáèåñÜ ’\0’. Óôç óõíÝ÷åéá ÷ñçóéìïðïéïýìå ôçí
óõíÜñôçóç sizeof ãéá íá ôõðþóïõìå ðüóç ìíÞìç Ý÷åé äåóìåýóåé ï ðßíáêáò ðïõ äçëþóáìå.
Êáëþíôáò ôç óõíÜñôçóç strlen ôõðþíïõìå ôï ìÞêïò ôïõ string ôï ïðïßï áðïèçêåýóáìå óôïí
ðßíáêá. ¼ôáí åêôåëÝóåôå ôï ðñüãñáììá ðáñáôçñåßóôå üôé ïé äýï Ýííïéåò äåí ôáõôßæïíôáé.
Óôç óõíÝ÷åéá ôõðþíïõìå ôá ðåñéå÷üìåíá ôïõ ðßíáêá ìå äýï ôñüðïõò. Ï ðñþôïò ôñüðïò
åßíáé üðùò èá ôõðþíáìå ôá ðåñéå÷üìåíá åíüò ðßíáêá ïðïéïõäÞðïôå Üëëïõ âáóéêïý ôýðïõ äçëáäÞ ÷ñçóéìïðïéþíôáò ìßá for êáé ôõðþíïíôáò üëá ôá óôïé÷åßá. Ìå ôïí äåýôåñï
ôñüðï ÷ñçóéìïðïéïýìå ìüíï ôï üíïìá ôïõ ðßíáêá óôç óõíÜñôçóç cout. ¼ôáí åêôåëÝóåôå
ôï ðñüãñáììá ðáñáôçñåßóôå üôé ìå ôïí ðñþôï ôñüðï ôõðþíïíôáé üëá ôá óôïé÷åßá ôïõ ðßíáêá (áêüìç êáé áõôÜ ìå ôéìÞ ’\0’), åíþ ìå ôïí äåýôåñï ôñüðï ç åêôýðùóç óôáìáôÜ óôï
ðñþôï óôïé÷åßï ìå ôéìÞ ’\0’. Ìå ôïí äåýôåñï ôñüðï ôõðþíåôáé ìüíï ôï string ôï ïðïßï âñßóêåôáé áðïèçêåõìÝíï ìÝóá óôïí ðßíáêá. ÐëçêôñïëïãÞóôå, áðïèçêåýóôå ùò prog3a.cpp,
ìåôáãëùôßóôå êáé åêôåëÝóôå ôï áêüëïõèï ðñüãñáììá:
#include <iostream>
main(){
const int N=30;
char c[N]={’m’,’y’,’ ’,’n’,’a’,’m’,’e’};
cout ¿ "the size of the array c is: " ¿ sizeof(c) ¿ endl;
cout ¿ "the length of the string c is: " ¿ strlen(c) ¿ endl;
cout ¿ "the contents of the array are: ’";
for (int i=0;i<N;i++) cout ¿ c[i];
cout ¿ "’" ¿ endl;
2
cout ¿ "but when the string is printed the result is: ’";
cout ¿ c;
cout ¿ "’" ¿ endl ¿ endl;
}
2. Ëüãù ôçò óõ÷íÞò ÷ñÞóçò ðéíÜêùí ÷áñáêôÞñùí õðÜñ÷åé êáé Ýíáò åõêïëüôåñïò ôñüðïò áñ÷éêïðïßçóçò áðïêëåéóôéêÜ ãéá ôïõò ðßíáêåò ôýðïõ char óýìöùíá ìå ôïí ïðïßï ïé ïñìáèïß
÷áñáêôÞñùí êëåßíïíôáé áíÜìåóá óå äéðëÜ åéóáãùãéêÜ. ÔñïðïðïéÞóôå ôçí ãñáììÞ äÞëùóçò
êáé áñ÷éêïðïßçóçò ôïõ ðáñáðÜíù ðñïãñÜììáôïò óå:
char c[N]="my name";
áðïèçêåýóôå ùò prog3b.cpp, ìåôáãëùôßóôå êáé åêôåëÝóôå ôï íÝï ðñüãñáììá.
3. ÔñïðïðïéÞóôå ôï ðáñáðÜíù ðñüãñáììá Ýôóé þóôå ï ðßíáêáò íá äçëþíåôáé ÷ùñßò íá áñ÷éêïðïéåßôáé. Áðïèçêåýóôå ùò prog3c.cpp, ìåôáãëùôßóôå êáé åêôåëÝóôå ôï íÝï ðñüãñáììá.
Ðáñáôçñåßóôå ðùò ëåéôïõñãïýí ïé óõíáñôÞóåéò strlen êáé cout.
4. ÔñïðïðïéÞóôå ôï ðáñáðÜíù ðñüãñáììá Ýôóé þóôå ï ðßíáêáò íá äçëþíåôáé êáé íá áñ÷éêïðïéåßôáé ìå ôçí ôéìÞ 0 (äçëáäÞ ìå ôïí ÷áñáêôÞñá ’\0’) ãéá üëåò ôéò èÝóåéò ôïõ. Áðïèçêåýóôå
ùò prog3d.cpp, ìåôáãëùôßóôå êáé åêôåëÝóôå ôï íÝï ðñüãñáììá. Ðáñáôçñåßóôå ðùò ëåéôïõñãïýí ïé óõíáñôÞóåéò strlen êáé cout.
5. ÅñùôÞóåéò
• Ðïéüò ÷áñáêôÞñáò äçëþíåé ôï ôÝëïò åíüò string;
• Ðüóåò èÝóåéò ðñÝðåé íá Ý÷åé Ýíáò ðßíáêáò Ýôóé þóôå íá ÷ùñÜåé ôï string: "hello
world!";
• Ç óõíÜñôçóç strlen ðñïóìåôñÜåé óôï ìÞêïò ôïõ string êáé ôïí ÷áñáêôÞñá ëÞîçò ’\0’;
3.4 ÓõíáñôÞóåéò ÷åéñéóìïý string óå ðßíáêåò ÷áñáêôÞñùí
Óôá ðáñáäåßãìáôá ðïõ ðñïçãÞèçêáí Ý÷ïõìå Þäç ÷ñçóéìïðïéÞóåé ôç óõíÜñôçóç strlen ìßá áðü
ôéò ðïëëÝò óõíáñôÞóåéò ðïõ ðáñÝ÷åé ç C++ ãéá ôïí ÷åéñéóìü ôùí string. ¼ëåò ïé óõíáñôÞóåéò
ðïõ áêïëïõèïýí êáé áöïñïýí ôïí ÷åéñéóìü string ëåéôïõñãïýí ìÝ÷ñé íá åíôïðßóïõí ôïí ðñþôï
ìçäåíéêü ÷áñáêôÞñá óôï string, áãíïþíôáò üôé áêïëïõèåß ìåôÜ áðü áõôüí.
1. Ç óõíÜñôçóç strcpy áíôéãñÜöåé Ýíá string áðü Ýíáí ðßíáêá ÷áñáêôÞñùí óå Ýíá Üëëï ðßíáêá ÷áñáêôÞñùí. ÄÝ÷åôáé ùò ïñßóìáôá äýï äåßêôåò óå char êáé áíôéãñÜöåé ôï string
ôïõ äåýôåñïõ ïñßóìáôïò (ìáæß ìå ôïí ôåëåõôáßï ìçäåíéêü ÷áñáêôÞñá) óôïí ðñþôï ðßíáêá.
ÐëçêôñïëïãÞóôå, áðïèçêåýóôå ùò prog3e.cpp, ìåôáãëùôßóôå êáé åêôåëÝóôå ôï áêüëïõèï
ðñüãñáììá:
3
#include <iostream>
void print string(char s[], const int N){
cout ¿ "s=" ¿ s ¿ endl;
cout ¿ "s=";
for (int i=0;i<N;i++) cout ¿ s[i];
cout ¿ endl ¿ endl;
return;
}
main(){
/∗ Ç óõíÜñôçóç áíôéãñáöÞò strcpy ∗/
const int N=10;
char d[N],c[N];
print string(c,N);
print string(d,N);
strcpy(c,"hello");
print string(c,N);
print string(d,N);
strcpy(d,c);
print string(c,N);
print string(d,N);
}
Ç óõíÜñôçóç strcpy äåí ãíùñßæåé ôßðïôá ãéá ôï ìÝãåèïò ôùí ðéíÜêùí áöïý äåí äÝ÷åôáé
áíôßóôïé÷á ïñßóìáôá. ÏõóéáóôéêÜ ôá ïñßóìáôá ðïõ äÝ÷åôáé åßíáé äåßêôåò óå ÷áñáêôÞñá êáé
ëåéôïõñãåß ìÝ÷ñé íá åíôïðßóåé ôïí ðñþôï ìçäåíéêü ÷áñáêôÞñá. Åßíáé ëïéðüí áðïêëåéóôéêÜ
óôçí åõèýíç ôïõ ðñïãñáììáôéóôÞ íá ìçí îåðåñÜóåé ôï ìÝãåèïò ôïõ ðßíáêá áíôéãñÜöïíôáò
Ýíá ìåãáëýôåñï string óå ìéêñüôåñïõ ìåãÝèïõò ðßíáêá. Óôçí ðåñßðôùóç áõôÞ ç óõíÜñôçóç
èá ëåéôïõñãÞóåé êáôáóôñÝöïíôáò ðéèáíþò ôá ðåñéå÷üìåíá Üëëùí ìåôáâëçôþí.
2. Ç óõíÜñôçóç strncpy áíôéãñÜöåé n ÷áñáêôÞñåò åíüò string áðü Ýíáí ðßíáêá ÷áñáêôÞñùí
óå Ýíá Üëëï ðßíáêá ÷áñáêôÞñùí. ÄÝ÷åôáé ùò ïñßóìáôá äýï äåßêôåò ôýðïõ char êáé Ýíáí
áêÝñáéï n êáé áíôéãñÜöåé n ÷áñáêôÞñåò áðü ôï string ôïõ äåýôåñïõ ïñßóìáôïò (ìáæß ìå
ôïí ôåëåõôáßï ìçäåíéêü ÷áñáêôÞñá) óôïí ðñþôï ðßíáêá. ÐëçêôñïëïãÞóôå, áðïèçêåýóôå
ùò prog3f.cpp, ìåôáãëùôßóôå êáé åêôåëÝóôå ôï áêüëïõèï ðñüãñáììá:
#include <iostream>
#include <string.h>
main(){
/∗ Ç óõíÜñôçóç áíôéãñáöÞò strncpy ∗/
const int N=10;
char c[N]={’ 0’}, d[N]={0};
cout ¿ c ¿ endl;
cout ¿ d ¿ endl ¿ endl;
strcpy(c,"hello world");
4
cout ¿ c ¿ endl;
cout ¿ d ¿ endl ¿ endl;
strncpy(d,c,5);
cout ¿ c ¿ endl;
cout ¿ d ¿ endl ¿ endl;
}
3. Ç óõíÜñôçóç strcmp óõãêñßíåé äýï string êáé åðéóôñÝöåé ôéìÞ 0 áí ôá string åßíáé ßäéá
êáé ìéêñüôåñç Þ ìåãáëýôåñç áðü 0 áíÜëïãá ìå ôï ðïéü string åßíáé ìåãáëýôåñï. ÄÝ÷åôáé
ùò ïñßóìáôá äýï äåßêôåò ôýðïõ char. Ç ó÷Ýóç äéÜôáîçò ôùí ÷áñáêôÞñùí êáèïñßæåôáé
áðü ôï ðñüôõðï ASCII. Ç óõíÜñôçóç åîåôÜæåé ðñþôá ôïõò ðñþôïõò ÷áñáêôÞñåò êáé áí
åßíáé ßäéïé óõíå÷ßæåé ìå ôïõò äåýôåñïõò ê.ï.ê. Ç éóüôçôá éó÷ýåé ìüíï áí üëïé ïé ÷áñáêôÞñåò
åíüò string åßíáé ßäéïé ìå ôïõò áíôßóôïé÷ïõò ÷áñáêôÞñåò ôïõ Üëëïõ string. Ç óõíÜñôçóç áõôÞ
åßíáé ðïëý ÷ñÞóéìç óôçí ôáîéíüìçóç ëÝîåùí. ÐëçêôñïëïãÞóôå, áðïèçêåýóôå ùò prog3g.cpp,
ìåôáãëùôßóôå êáé åêôåëÝóôå ôï áêüëïõèï ðñüãñáììá:
#include <iostream>
#include <string.h>
main(){
/∗ Ç óõíÜñôçóç óýãêñéóçò strcmp ∗/
const int N=10;
char c[N]="HELLO", d[N]="Hello";
cout ¿ strcmp(c,d) ¿ endl;
cout ¿ strcmp(d,c) ¿ endl;
strncpy(d,c,4);
cout ¿ strcmp(c,d) ¿ endl;
strcpy(d,c);
cout ¿ strcmp(c,d) ¿ endl;
}
4. ÄçìéïõñãÞóôå Ýíáí ðßíáêá áðü string (äéäéÜóôáôïò ðßíáêáò ôýðïõ char), áñ÷éêïðïéÞóôå ìå
ïíüìáôá ôçò åðéëïãÞò óáò êáé ôáîéíïìÞóôå ôá, ÷ñçóéìïðïéþíôáò ôéò ðáñáðÜíù óõíáñôÞóåéò.
5. ÅñùôÞóåéò
• Ðïéü åßíáé ôï áðïôÝëåóìá ôçò strcmp áí óõãêñéèïýí ôá string "hello" êáé "hell";
• Óôç ó÷Ýóç äéÜôáîçò ðïõ êáèïñßæåôáé ãéá ôïõò ÷áñáêôÞñåò áðü ôï ðñüôõðï ASCII, ôá
êåöáëáßá Þ ôá ìéêñÜ ãñÜììáôá ôçò ëáôéíéêÞò ãëþóóáò ðñïçãïýíôáé óå óåéñÜ êáôÜôáîçò;
• Óôçí õëïðïßçóç ôçò strcpy áíôéãñÜöåôáé áõôüìáôá ï ôåëåõôáßïò ÷áñáêôÞñáò (’\0’) ôïõ
string;
5
3.5 Ï ôýðïò string
Ç ãëþóóá C++ õðïóôçñßæåé Ýíáí íÝï êáé ðéï åõÝëéêôï ôñüðï õëïðïßçóçò ôçò Ýííïéáò ôïõ string.
Ç Ýííïéá ôïõ string ðáñáìÝíåé ç ßäéá äçëáäÞ åßíáé Ýíáò ïñìáèüò ÷áñáêôÞñùí ðïõ ôåëåéþíåé ìå ôïí
÷áñáêôÞñá ’\0’. Ç õëïðïßçóç üìùò äåí ãßíåôáé ìå ðßíáêåò ÷áñáêôÞñùí áëëÜ ÷ñçóéìïðïéþíôáò
ôçí Ýííïéá ôçò ëßóôáò. Ôá ðëåïíåêôÞìáôá åßíáé ðïëëÜ áöïý ç äÝóìåõóç ôçò áðáéôïýìåíçò ìíÞìçò
ãßíåôáé äõíáìéêÜ êáé áõôüìáôá üôáí áðáéôåßôáé, ï ÷ñÞóôçò ðñïóôáôåýåôáé áðü ôéò ðåñéðôþóåéò
óöáëìÜôùí ðïõ åßäáìå óôçí ðñïçãïýìåíç ðáñÜãñáöï êáé ìéá óåéñÜ áðï ëåéôïõñãßåò ãßíïíôáé
ìå ôñüðï áíôßóôïé÷ï ìå ôéò ìåôáâëçôÝò âáóéêþí ôýðùí. Ï ôýðïò string åßíáé õëïðïéçìÝíïò óôï
áñ÷åßï string, ôï ïðïßï ðñÝðåé íá óõìðåñéëáìâÜíïõìå óôá ðñïãñÜììáôÜ ìáò ÷ñçóéìïðïéþíôáò
ôçí åíôïëÞ #include.
1. Óôï åðüìåíï ðáñÜäåéãìá ðáñïõóéÜæåôáé ï ôñüðïò äÞëùóçò êáé áñ÷éêïðïßçóçò ìßáò ìåôáâëçôÞò ôýðïõ string. Ðáñáôçñåßóôå üôé äåí áðáéôåßôáé ç äÞëùóç ôïõ ìÞêïõò ôùí ÷áñáêôÞñùí. Ôï ìÞêïò õðïëïãßæåôáé áõôüìáôá áðü ôçí áñ÷éêïðïßçóç êáé äåóìåýåôáé ï êáôÜëëçëïò áñéèìüò èÝóåùí ìíÞìçò. Áðü ôçí åêôÝëåóç ôïõ ðñïãñÜììáôïò íá óõìðáéñÜíåôå ôé
åðéóôñÝöåé ç óõíÜñôçóç sizeof êáé ôé ç ìÝèïäïò length(). Åðßóçò ðáñáôçñåßóôå üôé ôá óýìâïëá [] ìðïñïýí åðßóçò íá ÷ñçóéìïðïéçèïýí êáé óôéò ìåôáâëçôÝò ôïõ ôýðïõ string üðùò
óôïõò ðßíáêåò. ÔÝëïò ðáñáôçñåßóôå üôé ç cout ìðïñåß íá ôõðþíåé ìåôáâëçôÝò ôýðïõ string.
ÐëçêôñïëïãÞóôå, áðïèçêåýóôå ùò prog3h.cpp, ìåôáãëùôßóôå êáé åêôåëÝóôå ôï áêüëïõèï
ðñüãñáììá:
#include <string>
#include <iostream>
main(){
string a="my name";
cout ¿ "the size of the string a is: " ¿ sizeof(a) ¿ endl;
cout ¿ "the length of the string a is: " ¿ a.length() ¿ endl;
for (int i=0;i<a.length();i++) cout ¿ a[i];
cout ¿ endl;
cout ¿ a ¿ endl;
cout ¿ endl;
}
2. Óôï åðüìåíï ðáñÜäåéãìá ðáñïõóéÜæïíôáé ôåëåóôÝò êáé ìÝèïäïé ðïõ ìðïñïýí íá åöáñìïóôïýí óå ìåôáâëçôÝò ôýðïõ string. Ï ôåëåóôÞò åê÷þñçóçò = ìðïñåß íá ÷ñçóéìïðïéçèåß ìå
ôñüðïõò ðáñáðëÞóéïõò ôçò ÷ñÞóçò ôïõ ìå ìåôáâëçôÝò ôùí âáóéêþí ôýðùí. Åðßóçò ï ôåëåóôÞò + ÷ñçóéìïðïéåßôáé ãéá íá åíþóåé äýï string. ÐáñáðëÞóéá åßíáé êáé ç ÷ñÞóç ôïõ += ï
ïðïßïò åíþíåé ôï string ðïõ ðñïçãåßôáé ôïõ ôåëåóôÞ ìå ôï string ðïõ áêïëïõèåß ôïí ôåëåóôÞ.
Ï ôýðïò string åßíáé ðñïéêéóìÝíïò êáé ìå ìéá óåéñÜ áðü ìåèüäïõò. Óôï ðáñÜäåéãìá ðïõ
áêïëïõèåß ðáñïõóéÜæïíôáé ìüíï ôñåéò áðï áõôÝò. Ðáñáôçñþíôáò ôá áðïôåëÝóìáôá åêôéìÞóôå ôçí ëåéôïõñãßá ôùí ìåèüäùí áõôþí. ÐëçêôñïëïãÞóôå, áðïèçêåýóôå ùò prog3i.cpp,
ìåôáãëùôßóôå êáé åêôåëÝóôå ôï áêüëïõèï ðñüãñáììá:
6
#include <string>
#include <iostream>
main(){
string s1,s2,s3,s4,s5;
s1 = "a new value ";
s2 = s1;
s3 = ’x’;
cout ¿ "s1=" ¿ s1 ¿ endl;
cout ¿ "s2=" ¿ s2 ¿ endl;
cout ¿ "s3=" ¿ s3 ¿ endl;
s3 += "yz";
cout ¿ "s3=" ¿ s3 ¿ endl;
s5 = s2+s3;
cout ¿ "s5=" ¿ s5 ¿ endl;
s4="hello";
cout ¿ "s4=" ¿ s4 ¿ endl;
s5.assign (s4, 0, 3);
cout ¿ "s5=" ¿ s5 ¿ endl;
s5.append (s4, 2, 3);
cout ¿ "s5=" ¿ s5 ¿ endl;
s5.swap (s4); // exchange s4 and s5
cout ¿ "s5=" ¿ s5 ¿ endl;
}
3. Óôï åðüìåíï ðáñÜäåéãìá ðáñïõóéÜæåôáé ç ëåéôïõñãßá ôùí ôåëåóôþí óýãêñéóçò. Ç ó÷Ýóç
äéÜôáîçò ôùí ìåôáâëçôþí ôýðïõ string êáèïñßæåôáé áðü ôï ðñüôõðï ASCII (üðùò êáé ãéá
ôïõò ðßíáêåò ÷áñáêôÞñùí). ÐëçêôñïëïãÞóôå, áðïèçêåýóôå ùò prog3j.cpp, ìåôáãëùôßóôå
êáé åêôåëÝóôå ôï áêüëïõèï ðñüãñáììá:
#include <string>
#include <iostream>
main(){
string s1,s2;
s1 = "John";
s2 = "George";
cout ¿ (s1 = = s2) ¿ endl;
cout ¿ (s1 ! = s2) ¿ endl;
cout ¿ (s1 < = s2) ¿ endl;
cout ¿ (s1 < s2) ¿ endl;
cout ¿ (s1 > = s2) ¿ endl;
cout ¿ (s1 > s2) ¿ endl;
}
7
4. Ï ôýðïò string ëåéôïõñãåß üðùò êáé ïé âáóéêïß ôýðïé ôçò ãëþóóáò. ¸ôóé ìðïñïýìå ãéá
ðáñÜäåéãìá íá äçìéïõñãÞóïõìå ðßíáêåò áðü string. Óôï åðüìåíï ðáñÜäåéãìá äçìéïõñãïýìå Ýíáí ôÝôïéï ðßíáêá ðÝíôå èÝóåùí êáé áíáæçôïýìå ôï ìåãáëýôåñï êáé ôï ìéêñüôåñï
string. ÐëçêôñïëïãÞóôå, áðïèçêåýóôå ùò prog3k.cpp, ìåôáãëùôßóôå êáé åêôåëÝóôå ôï áêüëïõèï ðñüãñáììá:
#include <string>
#include <iostream>
main(){
const int N=5;
string s[N]={"John","George","Peter","Alex","Jack"};
string max=s[0], min=s[0];
for (int i=1;i<N;i++){
if (s[i]>max) max=s[i];
if (s[i]<min) min=s[i];
}
cout ¿ min ¿ ", " ¿ max ¿ endl;
}
5. ÄçìéïõñãÞóôå ìßá óõíÜñôçóç ç ïðïßá íá äÝ÷åôáé ùò üñéóìá Ýíáí ìïíïäéÜóôáôï ðßíáêá 100
èÝóåùí ôýðïõ string êáé íá ôïí ôáîéíïìåß ÷ñçóéìïðïéþíôáò ïðïéáäÞðïôå ìÝèïäï ôáîéíüìçóçò èÝëåôå (ð.÷. ôçí ìÝèïäï åéóáãùãÞò Þ ôçí ìÝèïäï öõóáëßäáò).
6. ÅñùôÞóåéò
• Ìðïñïýìå íá äçëþóïõìå äåßêôåò óå string;
• Ìðïñïýìå íá äçëþóïõìå ðïëõäéÜóôáôïõò ðßíáêåò áðü string;
• ÊáôÜ ôçí ìåôáâßâáóç åíüò string óå ìßá óõíÜñôçóç äçìéïõñãåßôáé ôïðéêÞ ìåôáâëçôÞ
ôýðïõ string óôçí óõíÜñôçóç Þ ÷ñçóéìïðïéïýíôáé ïé èÝóåéò ìíÞìçò ôçò ìåôáâëçôÞò ôïõ
êõñßïõ ðñïãñÜììáôïò;
• Ëåéôïõñãåß ï ôåëåóôÞò ôçò áöáßñåóçò - áíÜìåóá óå äýï ìåôáâëçôÝò ôýðïõ string;
• Ëåéôïõñãåß ï ôåëåóôÞò ôçò äéáßñåóçò / áíÜìåóá óå äýï ìåôáâëçôÝò ôýðïõ string;
• Ëåéôïõñãåß ï ôåëåóôÞò ôïõ ðïëëáðëáóéáóìïý * áíÜìåóá óå äýï ìåôáâëçôÝò ôýðïõ
string;
3.6 ÅéóáãùãÞ string áðü ôï ðëçêôñïëüãéï
Ôï ðñüâëçìá ôçò åéóáãùãÞò åíüò string áðü ôï ðëçêôñïëüãéï ðáñïõóéÜæåé ïñéóìÝíåò éäéáéôåñüôçôåò ôéò ïðïßåò èá åíôïðßóïõìå ìå ôá åðüìåíá ðáñáäåßãìáôá óôá ïðïßá ÷ñçóéìïðïéïýíôáé êáé
ïé äýï ôñüðïé ãéá ôçí áðïèÞêåõóç åíüò string (äçëáäÞ ç ÷ñÞóç ðßíáêá ôýðïõ char êáé ç ÷ñÞóç
ìåôáâëçôÞò ôýðïõ string).
8
1. Ïé ìåôáâëçôÝò ôïõ ôýðïõ string ìðïñïýí íá ÷ñçóéìïðïéçèïýí áðåõèåßáò óôçí óõíÜñôçóç
cin. ÐëçêôñïëïãÞóôå, áðïèçêåýóôå ùò prog3l.cpp, ìåôáãëùôßóôå êáé åêôåëÝóôå ôï áêüëïõèï
ðñüãñáììá:
#include <string>
#include <iostream>
main(){
string s;
cout ¿ "give string:" ¿ endl;
cin À s;
cout ¿ s ¿ endl;
}
ÐëçêôñïëïãÞóôå Ýíá string ÷ùñßò êåíÜ. ÅêôåëÝóôå ôï îáíÜ êáé ðëçêôñïëïãåßóôå Ýíá string
ìå êåíÜ. Ðáñáôçñåßóôå ôá áðïôåëÝóìáôá ôçò åêôýðùóçò.
2. Ïé ðßíáêåò ÷áñáêôÞñùí åðßóçò ìðïñïýí íá ÷ñçóéìïðïéçèïýí óôçí cin. ÐëçêôñïëïãÞóôå,
áðïèçêåýóôå ùò prog3m.cpp, ìåôáãëùôßóôå êáé åêôåëÝóôå ôï áêüëïõèï ðñüãñáììá:
#include <iostream>
main(){
char s[256];
cout ¿ "give string:" ¿ endl;
cin À s;
cout ¿ s ¿ endl;
}
ÐëçêôñïëïãÞóôå Ýíá string ÷ùñßò êåíÜ. ÅêôåëÝóôå ôï îáíÜ êáé ðëçêôñïëïãåßóôå Ýíá string
ìå êåíÜ. Ðáñáôçñåßóôå ôá áðïôåëÝóìáôá ôçò åêôýðùóçò.
3. Ïé ðßíáêåò ÷áñáêôÞñùí åðßóçò ìðïñïýí íá áðïôåëÝóïõí ïñßóìáôá ôçò óõíÜñôçóçò getline
ç ïðïßá äéáâÜæåé áðü ôï ðëçêôñïëüãéï Ýíá óõãêåêñéìÝíï áñéèìü ÷áñáêôÞñùí (ôï äåýôåñï
üñéóìá) êáé ôïõò áðïèçêåýåé óå Ýíáí ðßíáêá ÷áñáêôÞñùí (ôï ðñþôï üñéóìá). ÐëçêôñïëïãÞóôå, áðïèçêåýóôå ùò prog3n.cpp, ìåôáãëùôßóôå êáé åêôåëÝóôå ôï áêüëïõèï ðñüãñáììá:
#include <iostream>
main(){
char s[256];
cout ¿ "give string:" ¿ endl;
cin.getline(s,255);
cout ¿ s ¿ endl;
}
ÐëçêôñïëïãÞóôå Ýíá string ÷ùñßò êåíÜ. ÅêôåëÝóôå ôï îáíÜ êáé ðëçêôñïëïãåßóôå Ýíá string
ìå êåíÜ. Ðáñáôçñåßóôå ôá áðïôåëÝóìáôá ôçò åêôýðùóçò.
9
4. Ç óõíÜñôçóç getline ðïõ ìáò äßíåôáé Ýôïéìç ëåéôïõñãåß ìüíï ãéá ðßíáêåò ÷áñáêôÞñùí. Ìðïñïýìå üìùò íá ôçí ÷ñçóéìïðïéÞóïõìå þóôå íá öôéÜîïõìå ôçí áêüëïõèç óõíÜñôçóç ç ïðïßá
ëåéôïõñãåß ìå áíôßóôïé÷ï ôñüðï êáé ãéá ôïí ôýðï string. ÐëçêôñïëïãÞóôå, áðïèçêåýóôå ùò
prog3o.cpp, ìåôáãëùôßóôå êáé åêôåëÝóôå ôï áêüëïõèï ðñüãñáììá:
#include <string>
#include <iostream>
void getline(string &s, const int N){
char tmps[N+1];
cin.getline(tmps,N);
s.assign(tmps);
}
main(){
string s;
cout ¿ "give string:" ¿ endl;
getline(s, 1024);
cout ¿ s ¿ endl;
}
ÐëçêôñïëïãÞóôå Ýíá string ÷ùñßò êåíÜ. ÅêôåëÝóôå ôï îáíÜ êáé ðëçêôñïëïãåßóôå Ýíá string
ìå êåíÜ. Ðáñáôçñåßóôå ôá áðïôåëÝóìáôá ôçò åêôýðùóçò. Ðïéüò åßíáé ï ñüëïò ôïõ óõìâüëïõ
ôçò áíáöïñÜò óôçí ìåôáâßâáóç ôïõ ðñþôïõ ïñßóìáôïò; Ôé êáèïñßæåé ç ôéìÞ ôïõ äåýôåñïõ
ïñßóìáôïò ôçò óõíÜñôçóçò;
5. ÅñùôÞóåéò
• ÐïéÜ åßíáé ôá ðëåïíåêôÞìáôá êáé ðïéá ôá ìåéïíåêôÞìáôá ôçò ÷ñÞóçò string óôçí åéóáãùãÞ ïñìáèþí ÷áñáêôÞñùí áðü ôï ðëçêôñïëüãéï;
6. Ìåãéóôïðïéåßóôå ôï ðáñÜèõñï ìå ôá ðåñéå÷üìåíá ôïõ êáôáëüãïõ C++LAB. ÅðéëÝîôå üëá
ôá áñ÷åßá ðïõ Ý÷ïõí åðÝêôáóç .cpp êáé áíôéãñÜøôå ôá óôçí äéóêÝôá óáò. Ôçí äéóêÝôá áõôÞ
èá ôçí Ý÷åôå ìáæß óáò óôï åðüìåíï åñãáóôÞñéï.
10