Ολυμπιάδα Πληροφορικής Μάθημα 6 Στόχοι μαθήματος • • Strings σαν πίνακες χαρακτήρων Strings μέσα από την βιβλιοθήκη της C++ Εισαγωγή • Στη C δεν υπάρχει ο τύπος String.

Download Report

Transcript Ολυμπιάδα Πληροφορικής Μάθημα 6 Στόχοι μαθήματος • • Strings σαν πίνακες χαρακτήρων Strings μέσα από την βιβλιοθήκη της C++ Εισαγωγή • Στη C δεν υπάρχει ο τύπος String.

Slide 1

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 2

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 3

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 4

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 5

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 6

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 7

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 8

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 9

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 10

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 11

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 12

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 13

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 14

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 15

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 16

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 17

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 18

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 19

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 20

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 21

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 22

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23


Slide 23

Ολυμπιάδα Πληροφορικής
Μάθημα 6

1

Στόχοι μαθήματος



Strings σαν πίνακες χαρακτήρων
Strings μέσα από την βιβλιοθήκη της C++

2

Εισαγωγή
• Στη C δεν υπάρχει ο τύπος String (όπως float,
int, char), αλλά αυτός υλοποιείται ως πίνακες
χαρακτήρων
• Μπορούμε να ορίσουμε το String σαν ένα
πίνακα από χαρακτήρες που τελειώνει με τον
χαρακτήτα NULL ‘\0’ ,
• π.χ. |Hello\0|, |Hi there\0|, |\0|
• (Προσοχή το \0 δεν φαίνεται στην οθόνη)

3

Αρχικοποίηση
char msg[ ]=“Hello”;
Δημιουργεί αυτόματα τον πίνακα

4

Δήλωση String/ Ανάγνωση-Εκτύπωση
Η δήλωση γίνεται όπως θα δηλώναμε έναν
πίνακα
char όνομα[μέγεθος];
π.χ. char onoma[20];
Ανάγνωση
scanf(“%s”,onoma);
Εκτύπωση
printf(“%s”,onoma);

Επειδή είναι string
Χωρίς το & επειδή
είναι πίνακας

5

Παράδειγμα 1
• Να δημιουργήσετε το πρόγραμμα που δέχεται
το όνομα και το επίθετο και τα τυπώνει στην
οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα
κενό μεταξύ τους.

6

Παράδειγμα 1

7

Παράδειγμα 2
• Να δημιουργήσετε το πρόγραμμα διαβάζει 10
ονόματα από το αρχείο par1.in και τα τυπώνει
στην οθόνη του υπολογιστή.

8

Παράδειγμα 2
#include
#include
using namespace std;

int main(){
char onoma[20];
int i;
FILE *fin;
fin=fopen("par2.in","r");

for(i=0;i<10;i++){
fscanf(fin,"%s",onoma);
printf("%s\n",onoma);
}
fclose(fin);
system("PAUSE");
return 0;
}

9

Παράδειγμα 3
• Να δημιουργήσετε το πρόγραμμα που δέχεται
μια λέξη με 4 χαρακτήρες και μετατοπίζει τους
χαρακτήρες κατά ένα δεξιά
• π.χ. abcd  dabc

10

Παράδειγμα 3
#include
#include
using namespace std;

int main(){
char onoma[4],temp;
int i;
scanf("%s",onoma);
temp=onoma[3];

for(i=2;i>=0;i--)
onoma[i+1]=onoma[i];
onoma[0]=temp;
printf("%s\n",onoma);
system("PAUSE");
return 0;
}

11

Συναρτήσεις
• Οι συναρτήσεις για τα strings βρίσκονται στο
αρχείο string.h
• strlen(s),υπολογίζει το μήκος του string
• strcpy(s1,s2),αντιγράφει το s2 στο s1
• strcat(s1,s2),προσθέτει το s2 στο s1.
• strcmp(s1,s2),συγκρίνει το s1 με s2 και
επιστρέφει θετική τιμή εάν s1
μεγαλύτερο(αλφαβητικά) από το s2, μηδέν
αν είναι ίσα, και αρνητική τιμή εάν s1
μικρότερο από s2.
12

Παράδειγμα 4 - Συναρτήσεις
#include
#include
#include
using namespace std;

if(strcmp(s1,s2)==0)
printf("Ta 2 string einai ta idia\n");
else
printf("Ta 2 string den einai ta
idia\n");
strcat(s1,s2);
printf("Enosi tou s1 me to S2
=%s\n",s1);
strcpy(s1,s2);

int main(){
char s1[100],s2[100];
printf("Dose ena string\n");
scanf("%s",s1);
printf("Size=%d\n",strlen(s1));
printf("Dose akoma ena string\n");
scanf("%s",s2);

printf("Antgrafi tou S2 sto S1.
S1=%s\n",s1);
system("PAUSE");
return 0;
}
13

Παράδειγμα 5
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τους χαρακτήρες από το αρχείο par5.in και
τυπώνει το πλήθος τους στο αρχείο par5.out

14

Παράδειγμα 5
#include
#include
using namespace std;
int main(){
FILE *fin,*fout;
int i=0;
char c;
fin=fopen("par5.in","r");
fout=fopen("par5.out","w");

while(feof(fin)==0){
fscanf(fin,"%c",&c);
i++;
}
fprintf(fout,"%d\n",i-1);
fclose(fin);
fclose(fout);
return 0;
}

15

Παράδειγμα 6
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
τις λέξεις από το αρχείο par6.in και τυπώνει το
πλήθος τους στο αρχείο par6.out

16

Παράδειγμα 6
#include
#include
using namespace std;

int main(){
FILE *fin,*fout;
int i=0;
char c[100];
fin=fopen("par6.in","r");

fout=fopen("par6.out","w");
while(feof(fin)==0){
fscanf(fin,"%s",c);
i++;
}
fprintf(fout,"%d\n",i);
fclose(fin);
fclose(fout);
return 0;
}
17

Παράδειγμα 7
• Να δημιουργήσετε το πρόγραμμα που διαβάζει
10 ονόματα από το αρχείο par7.in και τυπώνει
το όνομα με τους περισσότερους χαρακτήρες
στο αρχείο par7.out.

18

Παράδειγμα 7
#include
#include
using namespace std;
int main(){
char onoma[10][30]; //10 onomata me
megisto mege8os 30
char maxOnoma[30];
int i,max=-1,s;
FILE *fin,*fout;
fin=fopen("par7.in","r");
fout=fopen("par7.out","w");
for(i=0;i<10;i++){
fscanf(fin,"%s",onoma[i]);

s=strlen(onoma[i]);
if(s>max){
max=strlen(onoma[i]);
strcpy(maxOnoma,onoma[i]);
}
}
fprintf(fout,"%s",maxOnoma);
fclose(fin);
fclose(fout);
return 0;
}

19

Strings στη C++
• Στη C++ υπάρχει η βιβλιοθήκη που
αναφέρεται στο αντικείμενο και όχι στον τύπο
δεδομένων, string.
• Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε
πολλές έτοιμες συναρτήσεις που υπάρχουν στη
βιβλιοθήκη
• ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και
printf
• Εξακολουθεί όμως να προσπελαστεί σαν
πίνακας
20

Δήλωση String
#include
#include
using namespace std;

string όνομα μεταβλητής;

int main ()
{
string onoma;
cin>>onoma;
cout << "To onoma pou edwses einai " << onoma <<"\n";
system("PAUSE");
return 0;
}

21

Συνάρτηση size
// string::size
#include
#include
using namespace std;
int main ()
{
string str="Test string";
cout << "The size of str is " << str.size() << " characters.\n";
system("PAUSE");
return 0;
}
22

Περισσότερες συναρτήσεις στη σελίδα
http://www.cplusplus.com/reference/string/string/

23