Ολυμπιάδα Πληροφορικής Μάθημα 6
Στόχοι μαθήματος Strings σαν πίνακες χαρακτήρων Strings μέσα από την βιβλιοθήκη της C++
Εισαγωγή Στη C δεν υπάρχει ο τύπος String (όπως float, int, char), αλλά αυτός υλοποιείται ως πίνακες χαρακτήρων Μπορούμε να ορίσουμε το String σαν ένα πίνακα από χαρακτήρες που τελειώνει με τον χαρακτήτα NULL ‘\0’ , π.χ. |Hello\0|, |Hi there\0|, |\0| (Προσοχή το \0 δεν φαίνεται στην οθόνη)
Αρχικοποίηση char msg[ ]=“Hello”; Δημιουργεί αυτόματα τον πίνακα Η Ε L \0
Δήλωση String/ Ανάγνωση-Εκτύπωση Η δήλωση γίνεται όπως θα δηλώναμε έναν πίνακα char όνομα[μέγεθος]; π.χ. char onoma[20]; Ανάγνωση scanf(“%s”,onoma); Εκτύπωση printf(“%s”,onoma); Επειδή είναι string Χωρίς το & επειδή είναι πίνακας
Παράδειγμα 1 Να δημιουργήσετε το πρόγραμμα που δέχεται το όνομα και το επίθετο και τα τυπώνει στην οθόνη το ένα δίπλα στο άλλο αφήνοντας ένα κενό μεταξύ τους.
Παράδειγμα 1
Παράδειγμα 2 Να δημιουργήσετε το πρόγραμμα διαβάζει 10 ονόματα από το αρχείο par1.in και τα τυπώνει στην οθόνη του υπολογιστή.
Παράδειγμα 2 #include<iostream> #include<stdio.h> 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;
Παράδειγμα 3 Να δημιουργήσετε το πρόγραμμα που δέχεται μια λέξη με 4 χαρακτήρες και μετατοπίζει τους χαρακτήρες κατά ένα δεξιά π.χ. abcd dabc
Παράδειγμα 3 #include<iostream> #include<stdio.h> 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; }
Συναρτήσεις Οι συναρτήσεις για τα 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.
Παράδειγμα 4 - Συναρτήσεις #include<stdio.h> #include<iostream> #include<string.h> using namespace std; 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); 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); printf("Antgrafi tou S2 sto S1. S1=%s\n",s1); system("PAUSE"); return 0; }
Παράδειγμα 5 Να δημιουργήσετε το πρόγραμμα που διαβάζει τους χαρακτήρες από το αρχείο par5.in και τυπώνει το πλήθος τους στο αρχείο par5.out
Παράδειγμα 5 #include<stdio.h> #include<string.h> 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;
Παράδειγμα 6 Να δημιουργήσετε το πρόγραμμα που διαβάζει τις λέξεις από το αρχείο par6.in και τυπώνει το πλήθος τους στο αρχείο par6.out
Παράδειγμα 6 #include<stdio.h> #include<string.h> 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;
Παράδειγμα 7 Να δημιουργήσετε το πρόγραμμα που διαβάζει 10 ονόματα από το αρχείο par7.in και τυπώνει το όνομα με τους περισσότερους χαρακτήρες στο αρχείο par7.out.
Παράδειγμα 7 #include<stdio.h> #include<string.h> 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;
Strings στη C++ Στη C++ υπάρχει η βιβλιοθήκη <string> που αναφέρεται στο αντικείμενο και όχι στον τύπο δεδομένων, string. Μας δίνει τη δυνατότητα να χρησιμοποιήσουμε πολλές έτοιμες συναρτήσεις που υπάρχουν στη βιβλιοθήκη ΔΕΝ μπορείτε να χρησιμοποιήσετε τις scanf και printf Εξακολουθεί όμως να προσπελαστεί σαν πίνακας
Δήλωση String string όνομα μεταβλητής; #include <iostream> #include <string> using namespace std; int main () { string onoma; cin>>onoma; cout << "To onoma pou edwses einai " << onoma <<"\n"; system("PAUSE"); return 0; } string όνομα μεταβλητής;
Συνάρτηση size // string::size #include <iostream> #include <string> using namespace std; int main () { string str="Test string"; cout << "The size of str is " << str.size() << " characters.\n"; system("PAUSE"); return 0; }
Περισσότερες συναρτήσεις στη σελίδα http://www. cplusplus Περισσότερες συναρτήσεις στη σελίδα http://www.cplusplus.com/reference/string/string/