Εντολές C για εργασία με συμβολοσειρά. Είσοδος και έξοδος συμβολοσειρών χαρακτήρων σε C

Εργασία με χορδές. Κατηγορία χορδών. Κατασκευαστές τάξης. Συναρτήσεις assign() , append() , insert() , replace() , erase() , find() , rfind() , compare() , c_str() . Παραδείγματα

1. Ποιος είναι ο σκοπός της κλάσης συμβολοσειρών στα προγράμματα C++;

Η κλάση συμβολοσειρών έχει σχεδιαστεί για να λειτουργεί με συμβολοσειρές char*, οι οποίες είναι μηδενικές συμβολοσειρές. Η κλάση χορδών εισήχθη ως εναλλακτική λύση στην εργασία με χορδές char*. Γραμμές που τελειώνουν με χαρακτήρα ‘\0’ ονομάζονται και C-strings. Εφόσον η συμβολοσειρά είναι κλάση, μπορείτε να δηλώσετε αντικείμενα αυτής της κλάσης.

2. Ποιες λειτουργικές μονάδες (βιβλιοθήκες) πρέπει να συνδεθούν για να χρησιμοποιηθούν οι δυνατότητες της κλάσης συμβολοσειρών στο MS Visual Studio C++;

Για να χρησιμοποιήσετε τις δυνατότητες της κλάσης συμβολοσειρών στο MS Visual Studio (C++), πρέπει να συμπεριλάβετε τη βιβλιοθήκη και ο χώρος ονομάτων std.

#περιλαμβάνω χρησιμοποιώντας namespace std?
3. Πώς δηλώνεται μια μεταβλητή τύπου string; Παραδείγματα

Η δήλωση μιας μεταβλητής τύπου string γίνεται με τον ίδιο τρόπο όπως μια κανονική μεταβλητή. Πιθανή παραλλαγή δήλωσης με ταυτόχρονη αρχικοποίηση.

// πληκτρολογήστε συμβολοσειρά s1; // μεταβλητή με όνομα s1 τύπου string string s2 = "Αυτή είναι μια μεταβλητή συμβολοσειράς" ; // δήλωση με αρχικοποίηση // χρησιμοποιώντας μια μεταβλητή τύπου string με έναν τελεστή εκχώρησης s1 = s2; // s1 = "Αυτή είναι μια μεταβλητή συμβολοσειράς" s2 = "Νέο κείμενο" ;
4. Ποια είναι τα πλεονεκτήματα και τα μειονεκτήματα της χρήσης της κλάσης string σε σύγκριση με τον τύπο char*;

Η δημιουργία του νέου τύπου συμβολοσειράς οφειλόταν στις ελλείψεις της εργασίας με χορδές χαρακτήρων, τις οποίες παρουσίαζε ο τύπος char*. Σε σύγκριση με τον τύπο char*, ο τύπος συμβολοσειράς έχει τα ακόλουθα κύρια πλεονεκτήματα:

  • ικανότητα επεξεργασίας συμβολοσειρών χρησιμοποιώντας τυπικούς τελεστές C++ ( = , + , = = , <> και ούτω καθεξής.). Όπως γνωρίζετε, όταν χρησιμοποιούσατε τον τύπο char*, ακόμη και οι πιο απλές λειτουργίες με συμβολοσειρές φαίνονταν περίπλοκες και απαιτούσαν υπερβολική εγγραφή κώδικα προγράμματος.
  • εξασφαλίζοντας καλύτερη αξιοπιστία (ασφάλεια) του κώδικα προγράμματος. Για παράδειγμα, κατά την αντιγραφή συμβολοσειρών, ο τύπος συμβολοσειράς παρέχει κατάλληλες ενέργειες που μπορεί να προκύψουν εάν η συμβολοσειρά προέλευσης είναι μεγαλύτερη από τη συμβολοσειρά προορισμού.
  • παρέχοντας μια συμβολοσειρά ως ανεξάρτητο τύπο δεδομένων. Η δήλωση του τύπου συμβολοσειράς ως συμβολοσειράς είναι η ίδια για όλες τις μεταβλητές του προγράμματος, γεγονός που διασφαλίζει τη συνέπεια των δεδομένων.

Το κύριο μειονέκτημα του τύπου συμβολοσειράς σε σύγκριση με τον τύπο char* είναι η πιο αργή ταχύτητα επεξεργασίας δεδομένων. Αυτό οφείλεται στο γεγονός ότι ο τύπος συμβολοσειράς είναι, στην πραγματικότητα, μια κλάση κοντέινερ. Και η εργασία με μια τάξη απαιτεί πρόσθετη εφαρμογή κώδικα προγράμματος, η οποία, με τη σειρά της, απαιτεί επιπλέον χρόνο.

5. Ποιοι τελεστές μπορούν να χρησιμοποιηθούν με αντικείμενα της κλάσης συμβολοσειράς;

Η κλάση συμβολοσειρών είναι βολική επειδή σας επιτρέπει να χειρίζεστε εύκολα τις συμβολοσειρές χρησιμοποιώντας τυπικούς (υπερφορτωμένους) τελεστές.

Οι ακόλουθοι τελεστές μπορούν να χρησιμοποιηθούν με αντικείμενα της κλάσης συμβολοσειράς

  • = - ΑΝΑΘΕΣΗ ΕΡΓΑΣΙΑΣ
  • + – συνένωση (σύνδεση χορδών)
  • += – ανάθεση με συνένωση
  • == – ισότητα
  • != - ανισότητα
  • < - πιο λιγο
  • <= - λιγότερο ή ίσο
  • > - περισσότερο
  • >= - περισσότερο ή ίσο
  • – ευρετηρίαση

Παράδειγμα,που καταδεικνύει τη χρήση των παραπάνω δηλώσεων

// Τύπος συμβολοσειράς, πράξεις σε συμβολοσειρές string s1 = "s-1" ; string s2 = "s-2" ; συμβολοσειρά s3; bool b; // λειτουργία "=" (ανάθεση συμβολοσειράς) s3 = s1; // s3 = "s-1" // λειτουργία "+" - συνένωση συμβολοσειρών s3 = s3 + s2; // s3 = "s-1s-2" // λειτουργία "+=" - ανάθεση με συνένωση s3 = "s-3" ; s3 += "abc" ; // s3 = "s-3abc" // λειτουργία "==" - σύγκριση συμβολοσειρών b = s2==s1; // b = false b = s2=="s-2" ; // b = αληθές // λειτουργία "!=" - σύγκριση συμβολοσειρών (όχι ίση) s1 = "s1" ; s2 = "s2" ; b = s1 != s2; // b = αληθές // λειτουργίες "<" и ">" - σύγκριση χορδών s1 = "abcd" ; s2 = "de"; b = s1 > s2; // b = false b = s1< s2; // b = true // λειτουργίες "<=" и ">=" - σύγκριση συμβολοσειρών (λιγότερο ή ίσο, μεγαλύτερο ή ίσο) s1 = "abcd" ; s2 = "ab" ; b = s1 >= s2; // b = αληθές b = s1<= s2; // b = false b = s2 >= "ab" ; // b = αληθές // λειτουργία - ευρετηρίαση char c; s1 = "abcd" ; c = s1; // c = "c" c = s1; // c = "a"
6. Η κλάση συμβολοσειράς περιέχει κατασκευαστές;

Όπως κάθε κλάση, η κλάση συμβολοσειράς έχει έναν αριθμό κατασκευαστών. Τα κυριότερα είναι τα εξής:

Σειρά(); string(const char * str); string(const string & str);

7. Παραδείγματα αρχικοποίησης με χρήση κατασκευαστών

Ακολουθούν παραδείγματα αρχικοποίησης μεταβλητών τύπου συμβολοσειράς

Συμβολοσειρά s1 ("Γεια!" ); string s2 = "Γεια σου!" ; // αρχικοποίηση - συμβολοσειρά κατασκευαστή (const char * str) char * ps = "Γεια σου" ; συμβολοσειρά s3(ps); // συμβολοσειρά αρχικοποίησης s4(s3); // αρχικοποίηση - συμβολοσειρά κατασκευαστή (συμβολοσειρά const & str)συμβολοσειρά s5; // αρχικοποίηση - κατασκευαστής string().

8. Εκχώρηση χορδών. συνάρτηση assign(). Παραδείγματα

Για να αντιστοιχίσετε μια συμβολοσειρά σε μια άλλη, μπορείτε να χρησιμοποιήσετε μία από τις δύο μεθόδους:

  • χρησιμοποιήστε τον τελεστή ανάθεσης ‘=’ ;
  • χρησιμοποιήστε τη συνάρτηση assign() από την κλάση συμβολοσειράς.

Η συνάρτηση assign() έχει πολλές υπερφορτωμένες υλοποιήσεις.

Η πρώτη επιλογή είναι να καλέσετε μια συνάρτηση χωρίς παραμέτρους

Συμβολοσειρά &εκχώρηση(κενό);

Σε αυτή την περίπτωση, υπάρχει μια απλή αντιστοίχιση μιας συμβολοσειράς σε μια άλλη.

Η δεύτερη επιλογή σάς επιτρέπει να αντιγράψετε έναν καθορισμένο αριθμό χαρακτήρων από μια συμβολοσειρά:

Συμβολοσειρά &εκχώρηση(const string & s, size_type st, size_type num);

  • s – το αντικείμενο από το οποίο λαμβάνεται η συμβολοσειρά πηγής.
  • st – ευρετήριο (θέση) στη γραμμή από την οποία ξεκινά η αντιγραφή των num χαρακτήρων.
  • num – αριθμός χαρακτήρων που πρέπει να αντιγραφούν από τη θέση st.
  • size_type – τακτικός τύπος δεδομένων.

Η τρίτη παραλλαγή της συνάρτησης assign() αντιγράφει τους πρώτους num χαρακτήρες της συμβολοσειράς s στον καλούντα:

String & assign(const char * s, size_type num);

  • s – μια συμβολοσειρά που τελειώνει με τον χαρακτήρα ‘\0’ ;
  • num είναι ο αριθμός των χαρακτήρων που αντιγράφονται στο καλούν αντικείμενο. Οι πρώτοι αριθμοί χαρακτήρες από τη συμβολοσειρά s αντιγράφονται.

Παρακάτω είναι ένα παράδειγμα με διαφορετικές υλοποιήσεις της συνάρτησης assign().

Παράδειγμα.

// εκχώρηση συμβολοσειρών, συνάρτηση assign(). string s1 = "site" ; συμβολοσειρά s2; συμβολοσειρά s3; char * ps = "site" ; s3 = s1; // s3 = "site" s2.assign(s1); // s2 = "site" s2.assign(s1, 0, 4); // s2 = "best" s2.assign(ps, 8); // s2 = "bestprog"
9. Συνδυασμός χορδών. Η συνάρτηση append(). Παράδειγμα

Η συνάρτηση append() χρησιμοποιείται για τη συνένωση συμβολοσειρών. Μπορείτε επίσης να χρησιμοποιήσετε τη λειτουργία για να προσθέσετε σειρές ‘+’ , Για παράδειγμα:

Συμβολοσειρά s1; συμβολοσειρά s2; s1 = "abc" ; s2 = "def" ; s1 = s1 + s2; // s1 = "abcdef"

Ωστόσο, η συνάρτηση append() είναι καλή εάν χρειάζεται να προσαρτήσετε μέρος μιας συμβολοσειράς.

Η συνάρτηση έχει τις ακόλουθες επιλογές υλοποίησης:

String &append(const string & s, size_type start); string &append(const char * s, size_type num);

Στην πρώτη υλοποίηση, η συνάρτηση λαμβάνει μια αναφορά σε ένα αντικείμενο συμβολοσειράς μικρό, το οποίο προστίθεται στο καλούν αντικείμενο. Στη δεύτερη υλοποίηση, η συνάρτηση λαμβάνει έναν δείκτη σε μια συμβολοσειρά τύπου const char *, η οποία τελειώνει με τον χαρακτήρα '\0'.

Παράδειγμα.Επίδειξη της συνάρτησης append().

Συμβολοσειρά s1 = "abcdef" ; s2 = "1234567890" ; προσάρτημα(s2, 3, 4); // s1 = "abcdef4567" char * ps = "1234567890" ; s1 = "abcdef" ; s1.append(ps, 3); // s1 = "abcdef123"

10. Εισαγωγή χαρακτήρων σε μια γραμμή. συνάρτηση insert(). Παράδειγμα

Για να εισαγάγετε μια γραμμή σε μια δεδομένη θέση μιας άλλης γραμμής, πρέπει να χρησιμοποιήσετε τη συνάρτηση insert(), η οποία έχει πολλές επιλογές υλοποίησης.

Η πρώτη έκδοση της συνάρτησης σάς επιτρέπει να εισάγετε ολόκληρη τη συμβολοσειρά s στην καθορισμένη θέση έναρξης της γραμμής κλήσης (το αντικείμενο κλήσης):

Συμβολοσειρά & εισαγωγή(size_type start, const string &s);

Η δεύτερη έκδοση της συνάρτησης σάς επιτρέπει να εισάγετε ένα μέρος (παράμετροι insStart , num ) της συμβολοσειράς s στην καθορισμένη θέση έναρξης της γραμμής κλήσης:

Συμβολοσειρά & εισαγωγή(size_type start, const string &s, size_type insStart, size_type num);

Στις παραπάνω λειτουργίες:

  • s – μια συμβολοσειρά που εισάγεται στη γραμμή κλήσης.
  • start – θέση στη γραμμή κλήσης από την οποία έχει εισαχθεί η συμβολοσειρά s.
  • insStart – θέση στη συμβολοσειρά s από την οποία γίνεται η εισαγωγή.
  • num – ο αριθμός των χαρακτήρων στη συμβολοσειρά s που εισάγονται από τη θέση insStart.
string s1 = "abcdef" ; string s2 = "1234567890" ; s1.insert(3, s2); // s1 = "abc"+"1234567890"+"def"="abc1234567890def" s2.insert(2, s1, 1, 3); // s2 = "12bcd34567890"
11. Αντικατάσταση χαρακτήρων σε μια συμβολοσειρά. συνάρτηση αντικατάστασης(). Παράδειγμα

Η συνάρτηση replace() αντικαθιστά χαρακτήρες στη συμβολοσειρά κλήσης. Η συνάρτηση έχει τις ακόλουθες επιλογές υλοποίησης:

Συμβολοσειρά &αντικατάσταση(size_type start, size_type num, const string &s); string &replace(size_type start, size_type num, const string &s, size_type replStart, size_type replNum);

Στην πρώτη υλοποίηση, η καλούσα συμβολοσειρά αντικαθίσταται με τη συμβολοσειρά s. Μπορείτε να καθορίσετε τη θέση (έναρξη) και τον αριθμό των χαρακτήρων (αριθμός) στη γραμμή κλήσης που πρέπει να αντικατασταθούν με τη συμβολοσειρά s.

Η δεύτερη έκδοση της συνάρτησης replace() διαφέρει από την πρώτη στο ότι επιτρέπει μόνο μέρος της συμβολοσειράς s να αντικατασταθεί από την καλούσα συμβολοσειρά. Σε αυτήν την περίπτωση, δίνονται δύο πρόσθετες παράμετροι: η θέση του replStart και ο αριθμός των χαρακτήρων στη συμβολοσειρά s, οι οποίοι σχηματίζουν μια υποσυμβολοσειρά που αντικαθιστά τη συμβολοσειρά κλήσης.

Παράδειγμα.Επίδειξη της συνάρτησης replace().

Συμβολοσειρά s1 = "abcdef" ; string s2 = "1234567890" ; s2.replace(2, 4, s1); // s2 = "12abcdef7890" s2 = "1234567890" ; s2.replace(3, 2, s1); // s2 = "123abcdef67890" s2 = "1234567890" ; s2.replace(5, 1, s1); // s2 = "12345abcdef7890" // αντικατάσταση χαρακτήρων, συνάρτηση αντικατάστασης(). string s1 = "abcdef" ; string s2 = "1234567890" ; s2.replace(2, 4, s1); // s2 = "12abcdef7890" s2 = "1234567890" ; s2.replace(3, 2, s1); // s2 = "123abcdef67890" s2 = "1234567890" ; s2.replace(5, 1, s1); // s2 = "12345abcdef7890" s2 = "1234567890" ; s2.replace(5, 1, s1, 2, 3); // s2 = "12345cde7890" s2 = "1234567890" ; s2.replace(4, 2, s1, 0, 4); // s2 = "1234abcd7890"

12. Αφαίρεση καθορισμένου αριθμού χαρακτήρων από μια συμβολοσειρά. συνάρτηση erase(). Παράδειγμα

Για να αφαιρέσετε χαρακτήρες από τη συμβολοσειρά κλήσης, χρησιμοποιήστε τη συνάρτηση erase():

Συμβολοσειρά & διαγραφή(μέγεθος_τύπος δείκτης=0, μέγεθος_τύπος αριθμός = npos);

  • ευρετήριο – ευρετήριο (θέση) από το οποίο θέλετε να αφαιρέσετε χαρακτήρες στη γραμμή κλήσης.
  • num – αριθμός χαρακτήρων που αφαιρούνται.

Παράδειγμα.

String s = "01234567890" ; s.erase(3, 5); // s = "012890" s = "01234567890" ; s.erase(); // s = ""

13. Αναζητήστε έναν χαρακτήρα σε μια συμβολοσειρά. Συναρτήσεις Find() και rfind(). Παραδείγματα

Στην κλάση συμβολοσειράς, η αναζήτηση μιας συμβολοσειράς σε μια υποσυμβολοσειρά μπορεί να γίνει με δύο τρόπους, οι οποίοι διαφέρουν ως προς την κατεύθυνση της αναζήτησης:

  • σαρώνοντας τη συμβολοσειρά από την αρχή μέχρι το τέλος χρησιμοποιώντας τη συνάρτηση find().
  • σαρώνοντας τη συμβολοσειρά από το τέλος στην αρχή με τη συνάρτηση rfind().

Το πρωτότυπο της συνάρτησης find() μοιάζει με αυτό:

Size_type find(const string &s, size_type start = 0) const ;

  • s είναι η υποσυμβολοσειρά που αναζητείται στη συμβολοσειρά που καλεί αυτήν τη συνάρτηση. Η συνάρτηση αναζητά την πρώτη εμφάνιση της συμβολοσειράς s. Εάν η υποσυμβολοσειρά s βρίσκεται στη συμβολοσειρά που κάλεσε αυτή τη συνάρτηση, τότε επιστρέφεται η θέση της πρώτης εμφάνισης. Διαφορετικά επιστρέφεται -1.

Το πρωτότυπο της συνάρτησης rfind() μοιάζει με αυτό:

Size_type rfind(const string &s, size_type start = npos) const ;

  • s είναι η υποσυμβολοσειρά που αναζητείται στη συμβολοσειρά κλήσης. Η αναζήτηση για μια υποσυμβολοσειρά σε μια συμβολοσειρά πραγματοποιείται από το τέλος προς την αρχή. Εάν η υποσυμβολοσειρά s βρίσκεται στη συμβολοσειρά κλήσης, τότε η συνάρτηση επιστρέφει τη θέση της πρώτης εμφάνισης. Διαφορετικά, η συνάρτηση επιστρέφει -1.
  • npos – θέση του τελευταίου χαρακτήρα της καλούσας γραμμής.
  • start – η θέση από την οποία πραγματοποιείται η αναζήτηση.

Παράδειγμα 1.Ένα κομμάτι κώδικα που δείχνει το αποτέλεσμα της συνάρτησης find().

// πληκτρολογήστε συμβολοσειρά, συνάρτηση find() string s1 = "01234567890" ; string s2 = "345" ; string s3 = "abcd" ; int pos? pos = s1.find(s2); // pos = 3 pos = s1.find(s2, 1); // pos = 3 pos = s1.find("jklmn" , 0); // pos = -1 pos = s1.find(s3); // pos = -1 pos = s2.find(s1); // pos = -1

Παράδειγμα 2.Επίδειξη της συνάρτησης rfind().

// τύπος συμβολοσειράς, συναρτήσεις find() και rfind(). string s1 = "01234567890" ; string s2 = "345" ; string s3 = "abcd" ; string s4 = "abcd---abcd" ; int pos? pos = s1.rfind(s2); // pos = 3 pos = s1.rfind(s2, 12); // pos = 3 pos = s1.rfind(s2, 3); // pos = 3 pos = s1.rfind(s2, 2); // pos = -1 pos = s2.rfind(s1); // pos = -1 pos = s1.rfind(s3, 0); // pos = -1 // διαφορά μεταξύ των συναρτήσεων find() και rfind(). pos = s4.rfind(s3); // pos = 7 pos = s4.find(s3); // pos = 0
14. Σύγκριση τμημάτων χορδών. συνάρτηση compare(). Παράδειγμα

Δεδομένου ότι ο τύπος συμβολοσειράς είναι μια κλάση, μπορείτε να χρησιμοποιήσετε τη λειτουργία για να συγκρίνετε δύο συμβολοσειρές μεταξύ τους ‘= =’ . Εάν οι δύο συμβολοσειρές είναι ίδιες, τότε το αποτέλεσμα της σύγκρισης θα είναι αληθές. Διαφορετικά, το αποτέλεσμα της σύγκρισης θα είναι ψευδές.

Αλλά αν χρειάζεται να συγκρίνετε μέρος μιας συμβολοσειράς με μια άλλη, τότε παρέχεται η συνάρτηση compare() για αυτό.

πρωτότυπο συνάρτησης compare():

int compare(size_type start, size_type num, const string &s) const ;
  • s – η συμβολοσειρά που συγκρίνεται με την καλούσα συμβολοσειρά.
  • start – θέση (ευρετήριο) στη συμβολοσειρά s από την οποία ξεκινά η προβολή των χαρακτήρων συμβολοσειράς για σύγκριση.
  • num είναι ο αριθμός των χαρακτήρων στη συμβολοσειρά s που συγκρίνονται με τη συμβολοσειρά που καλεί.

Η λειτουργία λειτουργεί ως εξής. Εάν η καλούσα συμβολοσειρά είναι μικρότερη από τη συμβολοσειρά s, τότε η συνάρτηση επιστρέφει -1 (αρνητική τιμή). Εάν η καλούσα συμβολοσειρά είναι μεγαλύτερη από τη συμβολοσειρά s, η συνάρτηση επιστρέφει 1 (θετική τιμή). Εάν δύο συμβολοσειρές είναι ίσες, η συνάρτηση επιστρέφει 0.

Παράδειγμα. Επίδειξη της συνάρτησης compare():

// τύπος συμβολοσειράς, συνάρτηση compare(). string s1 = "012345" ; string s2 = "0123456789" ; int res? res = s1.compare(s2); // res = -1 res = s1.compare("33333" ); // res = -1 res = s1.compare("012345" ); // res = 0 res = s1.compare("345" ); // res = -1 res = s1.compare(0, 5, s2); // res = -1 res = s2.compare(0, 5, s1); // res = -1 res = s1.compare(0, 5, "012345" ); // res = -1 res = s2.compare(s1); // res = 1 res = s2.compare("456" ); // res = -1 res = s2.compare("000000" ); // res = 1
15. Λήψη συμβολοσειράς με τον χαρακτήρα τέλους γραμμής '\0' (char * ). Συνάρτηση c_str() . Παράδειγμα

Για να πάρετε μια συμβολοσειρά που τελειώνει με τον χαρακτήρα ‘\0’ Χρησιμοποιείται η συνάρτηση c_str().

Πρωτότυπο λειτουργίας:

const char * c_str() const ;

Η συνάρτηση δηλώνεται με τον τροποποιητή const. Αυτό σημαίνει ότι η συνάρτηση δεν μπορεί να τροποποιήσει το καλούν αντικείμενο (string).

Παράδειγμα 1. Μετατροπή τύπου συμβολοσειράς σε const char * .

// τύπου string, συνάρτηση c_str() string s = "abcdef" ; const char * ps; ps = s.c_str(); // ps = "abcdef"

Παράδειγμα 2.

Ακολουθεί μια επίδειξη μετατροπής μιας συμβολοσειράς από συμβολοσειρά σε System::Τύπος συμβολοσειράς για την εμφάνισή της σε ένα στοιχείο ελέγχου Label

Αναστείλετε το AdBlock σε αυτόν τον ιστότοπο.

Έτσι, χορδές στη γλώσσα C. Δεν υπάρχει ξεχωριστός τύπος δεδομένων για αυτά, όπως γίνεται σε πολλές άλλες γλώσσες προγραμματισμού. Στο C, μια συμβολοσειρά είναι ένας πίνακας χαρακτήρων. Για να επισημάνετε το τέλος μιας γραμμής, χρησιμοποιείται ο χαρακτήρας "\0", τον οποίο συζητήσαμε στο τελευταίο μέρος αυτού του μαθήματος. Δεν εμφανίζεται στην οθόνη με κανέναν τρόπο, επομένως δεν θα μπορείτε να το δείτε.

Δημιουργία και αρχικοποίηση μιας συμβολοσειράς

Δεδομένου ότι μια συμβολοσειρά είναι ένας πίνακας χαρακτήρων, η δήλωση και η προετοιμασία μιας συμβολοσειράς είναι παρόμοιες με παρόμοιες πράξεις με μονοδιάστατους πίνακες.

Ο παρακάτω κώδικας απεικονίζει τους διαφορετικούς τρόπους προετοιμασίας συμβολοσειρών.

Λίστα 1.

Char str; char str1 = ("Y", "o", "n", "g", "C", "o", "d", "e", "r", "\0"); char str2 = "Γεια σου!"; char str3 = "Γεια σου!";

Εικ.1 Δήλωση και αρχικοποίηση συμβολοσειρών

Στην πρώτη γραμμή δηλώνουμε απλώς έναν πίνακα δέκα χαρακτήρων. Δεν είναι καν χορδή, γιατί... δεν υπάρχει κανένας μηδενικός χαρακτήρας \0 σε αυτό, προς το παρόν είναι απλώς ένα σύνολο χαρακτήρων.

Δεύτερη γραμμή. Ο απλούστερος τρόπος για άμεση προετοιμασία. Δηλώνουμε κάθε σύμβολο ξεχωριστά. Το κύριο πράγμα εδώ είναι να μην ξεχάσετε να προσθέσετε τον μηδενικό χαρακτήρα \0.

Η τρίτη γραμμή είναι ανάλογη με τη δεύτερη γραμμή. Δώστε προσοχή στην εικόνα. Επειδή Υπάρχουν λιγότεροι χαρακτήρες στη γραμμή στα δεξιά από όσα στοιχεία στον πίνακα, τα υπόλοιπα στοιχεία θα γεμίσουν με \0 .

Τέταρτη γραμμή. Όπως μπορείτε να δείτε, δεν προσδιορίζεται μέγεθος εδώ. Το πρόγραμμα θα το υπολογίσει αυτόματα και θα δημιουργήσει μια σειρά χαρακτήρων του απαιτούμενου μήκους. Σε αυτήν την περίπτωση, ο μηδενικός χαρακτήρας \0 θα εισαχθεί τελευταίος.

Πώς να βγάζετε μια συμβολοσειρά

Ας επεκτείνουμε τον παραπάνω κώδικα σε ένα πλήρες πρόγραμμα που θα εμφανίζει τις δημιουργημένες γραμμές στην οθόνη.

Λίστα 2.

#περιλαμβάνω int main(void) ( char str; char str1 = ("Y", "o", "n", "g", "C", "o", "d", "e", "r"," \0"); char str2 = "Γεια σου!"; char str3 = "Γεια σου!"; for(int i = 0; i< 10; i = i + 1) printf("%c\t",str[i]); printf("\n"); puts(str1); printf("%s\n",str2); puts(str3); return 0; }


Εικ.2 Διάφοροι τρόποι εμφάνισης μιας συμβολοσειράς στην οθόνη

Όπως μπορείτε να δείτε, υπάρχουν αρκετοί βασικοί τρόποι εμφάνισης μιας συμβολοσειράς στην οθόνη.

  • χρησιμοποιήστε τη συνάρτηση printf με τον προσδιοριστή %s
  • χρησιμοποιήστε τη συνάρτηση puts
  • χρησιμοποιήστε τη συνάρτηση fputs, προσδιορίζοντας την τυπική ροή εξόδου ως stdout ως δεύτερη παράμετρο.

Η μόνη απόχρωση είναι με τις συναρτήσεις puts και fputs. Σημειώστε ότι η συνάρτηση puts τυλίγει την έξοδο στην επόμενη γραμμή, αλλά η συνάρτηση fputs όχι.

Όπως μπορείτε να δείτε, το συμπέρασμα είναι αρκετά απλό.

Εισαγωγή χορδών

Η είσοδος συμβολοσειράς είναι λίγο πιο περίπλοκη από την έξοδο. Ο απλούστερος τρόπος θα ήταν ο εξής:

Λίστα 3.

#περιλαμβάνω int main(void) (char str; gets(str); puts(str); return 0; )

Η συνάρτηση gets διακόπτει το πρόγραμμα, διαβάζει μια συμβολοσειρά χαρακτήρων που εισάγονται από το πληκτρολόγιο και την τοποθετεί σε έναν πίνακα χαρακτήρων, το όνομα του οποίου μεταβιβάζεται στη συνάρτηση ως παράμετρος.
Η συνάρτηση gets εξέρχεται με τον χαρακτήρα που αντιστοιχεί στο πλήκτρο enter και γράφεται στη συμβολοσειρά ως μηδενικός χαρακτήρας.
Παρατηρήσατε τον κίνδυνο; Εάν όχι, τότε ο μεταγλωττιστής θα σας προειδοποιήσει ευγενικά για αυτό. Το πρόβλημα είναι ότι η συνάρτηση gets εξέρχεται μόνο όταν ο χρήστης πατήσει enter. Αυτό είναι γεμάτο με το γεγονός ότι μπορούμε να προχωρήσουμε πέρα ​​από τον πίνακα, στην περίπτωσή μας - εάν έχουν εισαχθεί περισσότεροι από 20 χαρακτήρες.
Παρεμπιπτόντως, τα σφάλματα υπερχείλισης buffer θεωρούνταν προηγουμένως ο πιο συνηθισμένος τύπος ευπάθειας. Βρίσκονται ακόμα σήμερα, αλλά η χρήση τους για να χακάρετε προγράμματα έχει γίνει πολύ πιο δύσκολη.

Τι έχουμε λοιπόν; Έχουμε μια εργασία: να γράψουμε μια συμβολοσειρά σε έναν πίνακα περιορισμένου μεγέθους. Δηλαδή, πρέπει με κάποιο τρόπο να ελέγχουμε τον αριθμό των χαρακτήρων που εισάγει ο χρήστης. Και εδώ μας βοηθάει η συνάρτηση fgets:

Λίστα 4.

#περιλαμβάνω int main(void) (char str; fgets(str, 10, stdin); puts(str); return 0; )

Η συνάρτηση fgets παίρνει τρία ορίσματα ως είσοδο: τη μεταβλητή στην οποία θα γράψει τη συμβολοσειρά, το μέγεθος της συμβολοσειράς που θα γραφτεί και το όνομα της ροής από την οποία θα ληφθούν τα δεδομένα για εγγραφή στη συμβολοσειρά, σε αυτήν την περίπτωση το stdin. Όπως γνωρίζετε ήδη από το Μάθημα 3, το stdin είναι η τυπική ροή εισόδου που συνήθως σχετίζεται με το πληκτρολόγιο. Δεν είναι καθόλου απαραίτητο τα δεδομένα να προέρχονται από τη ροή stdin στο μέλλον θα χρησιμοποιούμε επίσης αυτή τη λειτουργία για την ανάγνωση δεδομένων από αρχεία.

Εάν κατά την εκτέλεση αυτού του προγράμματος εισάγουμε μια συμβολοσειρά μεγαλύτερη από 10 χαρακτήρες, μόνο 9 χαρακτήρες από την αρχή και μια αλλαγή γραμμής θα συνεχίσει να γράφεται στον πίνακα, τα fgets θα «κόψουν» τη συμβολοσειρά στο απαιτούμενο μήκος.

Σημειώστε ότι η συνάρτηση fgets δεν διαβάζει 10 χαρακτήρες, αλλά 9! Όπως θυμόμαστε, στις συμβολοσειρές ο τελευταίος χαρακτήρας δεσμεύεται για τον μηδενικό χαρακτήρα.

Ας το ελέγξουμε. Ας τρέξουμε το πρόγραμμα από την τελευταία λίστα. Και εισάγετε τη γραμμή 1234567890. Η γραμμή 123456789 θα εμφανιστεί στην οθόνη.


Εικ. 3 Παράδειγμα της συνάρτησης fgets

Γεννιέται το ερώτημα. Πού πήγε ο δέκατος χαρακτήρας; Και θα απαντήσω. Δεν έχει εξαφανιστεί, παραμένει στη ροή εισόδου. Εκτελέστε το παρακάτω πρόγραμμα.

Λίστα 5.

#περιλαμβάνω int main(void) (char str; fgets(str, 10, stdin); puts(str); int h = 99; printf("do %d\n", h); scanf("%d",&h) printf("μετά %d\n", h);

Ιδού το αποτέλεσμα της δουλειάς της.


Εικ.4 Μη κενή buffer stdin

Επιτρέψτε μου να εξηγήσω τι συνέβη. Καλέσαμε τη συνάρτηση fgets. Άνοιξε τη ροή εισόδου και περίμενε να εισάγουμε τα δεδομένα. Εισαγάγαμε 1234567890\n από το πληκτρολόγιο (\n Εννοώ πατώντας το πλήκτρο Enter). Αυτό πήγε στη ροή εισόδου stdin. Η συνάρτηση fgets, όπως αναμενόταν, πήρε τους πρώτους 9 χαρακτήρες 123456789 από τη ροή εισόδου, πρόσθεσε τον μηδενικό χαρακτήρα \0 σε αυτούς και τον έγραψε στη συμβολοσειρά str . Απομένουν ακόμη 0\n στη ροή εισόδου.

Στη συνέχεια δηλώνουμε τη μεταβλητή h. Εμφανίζουμε την αξία του στην οθόνη. Στη συνέχεια καλούμε τη συνάρτηση scanf. Εδώ αναμένεται να μπούμε σε κάτι, αλλά... υπάρχει 0\n στη ροή εισόδου, τότε η συνάρτηση scanf το αντιλαμβάνεται ως είσοδο μας και γράφει 0 στη μεταβλητή h. Στη συνέχεια το εμφανίζουμε στην οθόνη.

Αυτή, φυσικά, δεν είναι ακριβώς η συμπεριφορά που περιμένουμε. Για να αντιμετωπίσουμε αυτό το πρόβλημα, πρέπει να καθαρίσουμε το buffer εισόδου αφού έχουμε διαβάσει την είσοδο του χρήστη από αυτό. Για αυτό χρησιμοποιείται μια ειδική λειτουργία flush. Έχει μόνο μία παράμετρο - τη ροή που πρέπει να διαγραφεί.

Ας διορθώσουμε το τελευταίο παράδειγμα έτσι ώστε να λειτουργεί προβλέψιμα.

Λίστα 6.

#περιλαμβάνω int main(void) (char str; fgets(str, 10, stdin); fflush(stdin); // διαγραφή της ροής εισόδου puts(str); int h = 99; printf("do %d\n", h ) ; scanf("%d",&h);

Τώρα το πρόγραμμα θα λειτουργεί όπως θα έπρεπε.


Εικ.4 Πλύση του buffer stdin με τη συνάρτηση flush

Συνοψίζοντας, μπορούν να σημειωθούν δύο γεγονότα. Πρώτα. Προς το παρόν δεν είναι ασφαλές να χρησιμοποιήσετε τη συνάρτηση gets, επομένως συνιστάται η χρήση της συνάρτησης fgets παντού.

Δεύτερος. Μην ξεχάσετε να διαγράψετε το buffer εισόδου εάν χρησιμοποιείτε τη συνάρτηση fgets.

Αυτό ολοκληρώνει τη συζήτηση σχετικά με την εισαγωγή χορδών. Προχώρα.

Σε αυτό το μάθημα θα συζητήσουμε τις συμβολοσειρές τύπου C, μπορεί να έχετε ήδη δει αυτές τις χορδές στον ιστότοπό μας ή σε οποιοδήποτε άλλο εγχειρίδιο. Στην πραγματικότητα, οι συμβολοσειρές C είναι απλώς πίνακες χαρακτήρων, αλλά, με τις δικές τους ιδιαιτερότητες, έτσι γνωρίζουμε πάντα πού βρίσκεται το τέλος της γραμμής. Σε αυτό το άρθρο θα εξετάσουμε διάφορες λειτουργίες για την εργασία με συμβολοσειρές, για παράδειγμα, εσείς - αντιγράψτε, συνενώστε, λάβετε το μήκος μιας συμβολοσειράς.

Τι είναι οι χορδές;

Σημειώστε ότι μαζί με τις συμβολοσειρές τύπου C, οι οποίες είναι ουσιαστικά απλοί πίνακες, υπάρχουν και κυριολεκτικά συμβολοσειρών, όπως αυτό το "literal" . Στην πραγματικότητα, τόσο οι συμβολοσειρές όσο και οι κυριολεξίες είναι απλώς σύνολα χαρακτήρων που βρίσκονται δίπλα-δίπλα στη μνήμη του υπολογιστή. Αλλά υπάρχει ακόμα μια διαφορά μεταξύ πινάκων και literals: τα literals δεν μπορούν να αλλάξουν και οι συμβολοσειρές μπορούν.

Οποιαδήποτε συνάρτηση λαμβάνει μια συμβολοσειρά τύπου C μπορεί επίσης να λάβει ένα κυριολεκτικό ως παράμετρο. Υπάρχουν επίσης ορισμένες οντότητες στο C που μπορεί να μοιάζουν με συμβολοσειρές ενώ στην πραγματικότητα δεν είναι. Μιλάω για χαρακτήρες τώρα, περικλείονται σε μονά εισαγωγικά, ορίστε ένα παράδειγμα - "α", όπως μπορείτε να δείτε, αυτό δεν είναι συμβολοσειρά. Ένας χαρακτήρας μπορεί, σε μια συγκεκριμένη θέση, να εκχωρηθεί σε μια συμβολοσειρά, αλλά οι χαρακτήρες δεν μπορούν να υποβληθούν σε επεξεργασία ως συμβολοσειρά. Αν θυμάστε, οι πίνακες λειτουργούν σαν δείκτες, οπότε αν περάσετε έναν χαρακτήρα σε μια συμβολοσειρά, θα θεωρηθεί σφάλμα.

Από τα παραπάνω, θα έπρεπε να έχετε συνειδητοποιήσει ότι οι συμβολοσειρές είναι πίνακες χαρακτήρων και οι κυριολεκτικές συμβολοσειρές είναι λέξεις που περιβάλλονται από διπλά εισαγωγικά. Εδώ είναι ένα άλλο παράδειγμα κυριολεκτικού:

"Αυτή είναι μια στατική συμβολοσειρά"

Έχετε ξεχάσει την ιδιαιτερότητα των χορδών, που αναφέρθηκε λίγο πιο πάνω; Έτσι, οι συμβολοσειρές C πρέπει πάντα να τελειώνουν με έναν μηδενικό χαρακτήρα, κυριολεκτικά "\0". Επομένως, για να δηλώσετε μια συμβολοσειρά που αποτελείται από 49 γράμματα, πρέπει να κρατήσετε ένα επιπλέον κελί για τον μηδενικό χαρακτήρα:

Char myString;

Όπως μπορείτε να δείτε από το παράδειγμα, το μήκος του πίνακα είναι 50 χαρακτήρες, 49 από τους οποίους θα είναι μια γραμμή και ένας, ο τελευταίος θα είναι μηδενικός χαρακτήρας. Είναι σημαντικό να θυμάστε ότι πρέπει να υπάρχει πάντα ένας μηδενικός χαρακτήρας στο τέλος των γραμμών C, όπως ακριβώς υπάρχει μια τελεία στο τέλος κάθε πρότασης. Αν και ο μηδενικός χαρακτήρας δεν εμφανίζεται όταν εξάγεται η συμβολοσειρά, εξακολουθεί να καταλαμβάνει χώρο στη μνήμη. Έτσι, τεχνικά, σε μια σειρά από πενήντα στοιχεία, θα μπορούσατε να αποθηκεύσετε μόνο 49 γράμματα επειδή απαιτείται ο τελευταίος χαρακτήρας για τον τερματισμό της συμβολοσειράς. Επιπλέον, οι δείκτες μπορούν επίσης να χρησιμοποιηθούν ως συμβολοσειρά. Εάν διαβάσετε το άρθρο για το , μπορείτε να κάνετε κάτι σαν αυτό:

Char *myString; // δείκτης τύπου char myString = malloc(sizeof(*myString) * 64); // εκχώρηση μνήμης

Σε αυτό το παράδειγμα, έχουμε εκχωρήσει 64 θέσεις μνήμης για τον πίνακα myString. Για να ελευθερώσετε μνήμη, χρησιμοποιήστε τη συνάρτηση free().

Δωρεάν (myString);

Χρήση συμβολοσειρών

Οι συμβολοσειρές είναι χρήσιμες όταν χρειάζεται να εκτελέσετε διάφορες λειτουργίες σε πληροφορίες κειμένου. Για παράδειγμα, εάν θέλετε ο χρήστης να εισάγει ένα όνομα σε ένα πρόγραμμα, θα χρησιμοποιούσατε μια συμβολοσειρά. Η χρήση scanf() για την εισαγωγή μιας συμβολοσειράς λειτουργεί, αλλά μπορεί να οδηγήσει σε υπερχείλιση buffer. Εξάλλου, η συμβολοσειρά εισόδου μπορεί να είναι μεγαλύτερη από το μέγεθος της συμβολοσειράς buffer. Υπάρχουν διάφοροι τρόποι επίλυσης αυτού του προβλήματος, αλλά ο απλούστερος τρόπος είναι να χρησιμοποιήσετε το , το οποίο δηλώνεται στο αρχείο κεφαλίδας .

Κατά την ανάγνωση εισόδου από τον χρήστη, θα διαβάσει όλους τους χαρακτήρες εκτός από τον τελευταίο. Μετά από αυτό, ένας μηδενικός τερματιστής θα τοποθετηθεί στο τέλος της γραμμής ανάγνωσης. Η συνάρτηση fgets() θα διαβάζει χαρακτήρες μέχρι ο χρήστης να πατήσει Enter. Ας δούμε ένα παράδειγμα χρήσης fgets():

#περιλαμβάνω int main() ( char myString; // long string printf("Εισαγάγετε μια μεγάλη συμβολοσειρά: "); fgets(myString, 100, stdin); // διαβάστε τη συμβολοσειρά από τη ροή εισόδου printf("Εισαγάγατε την ακόλουθη συμβολοσειρά: %s", myString);

Η πρώτη παράμετρος στο fgets() είναι μια συμβολοσειρά, η δεύτερη παράμετρος είναι το μέγεθος της συμβολοσειράς και η τρίτη παράμετρος είναι ένας δείκτης στη ροή δεδομένων εισόδου.

Αποτέλεσμα του προγράμματος:

<ВВОД>...

Όπως μπορείτε να δείτε, από την έξοδο του προγράμματος, ένας χαρακτήρας νέας γραμμής - "\n" - εισήλθε στη γραμμή εισόδου. Αυτό συνέβη επειδή η fgets() μέτρησε το πάτημα του κουμπιού Enter στη συμβολοσειρά myString και ολοκλήρωσε την εργασία της. Αυτό σημαίνει ότι μπορεί να χρειαστεί να αφαιρέσετε με μη αυτόματο τρόπο τον χαρακτήρα της νέας γραμμής. Ένας τρόπος για να γίνει αυτό είναι η απαρίθμηση χαρακτήρα προς χαρακτήρα. Ας τροποποιήσουμε το πρόγραμμα και ας αφαιρέσουμε τον χαρακτήρα νέας γραμμής:

#περιλαμβάνω int main() ( char myString; // long string printf("Enter a long string: "); fgets(myString, 100, stdin); // διάβασε μια συμβολοσειρά από τη ροή εισόδου int i; for (i = 0; Εγώ< 100; i++) { if (myString[i] == "\n") { myString[i] = "\0"; break; } } printf("Вы ввели следующую строку: %s", myString); getchar(); }

Λάβετε υπόψη ότι εάν η συμβολοσειρά εισαγωγής περιέχει λιγότερους από 100 χαρακτήρες, τότε ένας χαρακτήρας νέας γραμμής θα συμπεριληφθεί επίσης στη συμβολοσειρά. Επομένως, μπορούμε να αφαιρέσουμε αυτόν τον χαρακτήρα χρησιμοποιώντας απλή ωμή δύναμη. Προσθέσαμε έναν βρόχο στο πρόγραμμα στον οποίο κάνουμε βρόχο μέσα από τους χαρακτήρες της συμβολοσειράς, γραμμές 12-19. Και όταν συναντάμε έναν χαρακτήρα νέας γραμμής, τον αντικαθιστούμε με έναν μηδενικό χαρακτήρα, γραμμή 16. Αποτέλεσμα του προγράμματος:

Εισαγάγετε μια μεγάλη γραμμή: Η μοίρα αφήνει το σημάδι της Έχετε εισαγάγει την ακόλουθη γραμμή: Η μοίρα αφήνει το σημάδι της Για να κλείσετε αυτό το παράθυρο, κάντε κλικ<ВВОД>...

Αυτα για τωρα. Στο επόμενο άρθρο θα σας πω για ειδικές λειτουργίες για εργασία με χορδές.

P.S.: Σε όλους μας αρέσει να παρακολουθούμε διαφορετικές εγγραφές βίντεο, αλλά μερικές φορές συμβαίνει ότι δεν είναι πάντα δυνατή η αναπαραγωγή ορισμένων μορφών αρχείων βίντεο. Έτσι, μπορείτε να λύσετε αυτό το πρόβλημα χρησιμοποιώντας το πρόγραμμα - xilisoft converter ultimate. Μπορείτε εύκολα να μετατρέψετε βίντεο από μια μορφή σε άλλη. Επιπλέον, αυτό το πρόγραμμα μπορεί επίσης να μετατρέψει αρχεία ήχου και κινούμενες εικόνες.

Η αξιόπιστη εταιρεία SEO Η Ινδία μπορεί να αυξήσει τα έσοδα των μικρών επιχειρήσεων

Το 80% των χρηστών αναζητούν στο Google και σε άλλες μηχανές αναζήτησης πριν κάνουν μια αγορά και πάνω από το 50% των ερωτημάτων που δημιουργούνται μέσω των μηχανών αναζήτησης μετατρέπονται. Αυτά τα δύο στατιστικά στοιχεία αποδεικνύουν τη σημασία του Search Engine Optimization. Υπάρχουν πολλά τέτοια στατιστικά και γεγονότα που κάνουν ένα ξεκάθαρο σημείο: κάθε επιχείρηση μικρής, μεσαίας ή μεγάλης κλίμακας χρειάζεται επαγγελματικές υπηρεσίες SEO. Οι μικρές επιχειρήσεις και οι νεοσύστατες επιχειρήσεις αντιμετωπίζουν συχνά προβλήματα προϋπολογισμού. Μπορούν να λάβουν βοήθεια από οποιοδήποτε αξιόπιστο πρακτορείο SEO από την Ινδία για να λάβουν την καλύτερη υπηρεσία SEO στον προϋπολογισμό τους για να αυξήσουν τα έσοδά τους.
Η αναζήτηση έχει μεγάλη επίδραση στο μυαλό των καταναλωτών. Σύμφωνα με τα διάφορα στατιστικά στοιχεία που μοιράζονται σημαντικοί ειδικοί στη βελτιστοποίηση μηχανών αναζήτησης σε διάφορους εξουσιοδοτημένους ιστότοπους όπως Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot κ.λπ. Το SEO συλλαμβάνει την πλειοψηφία των πελατών. Επίσης, οι δυνητικοί πελάτες που προέρχονται από τα οργανικά αποτελέσματα αναζήτησης έχουν υψηλότερο ποσοστό μετατροπών. Αυτά τα στατιστικά στοιχεία και η συμπεριφορά των καταναλωτών κάνουν πιο ξεκάθαρο ότι η καλύτερη υπηρεσία SEO δεν είναι πολυτέλεια, αλλά αναγκαιότητα για κάθε επιχείρηση.
Για να παρακάμψει τον ανταγωνισμό και να αυξήσει την επιχειρηματική ανάπτυξη, κάθε οργανισμός πρέπει να χρησιμοποιεί τις υπηρεσίες βελτιστοποίησης μηχανών αναζήτησης. Οι μεγάλες μάρκες μπορούν να επενδύσουν αρκετά χρήματα για την εξειδικευμένη υπηρεσία SEO που προσφέρει μια κορυφαία εταιρεία SEO ή ένας ειδικός SEO, αλλά οι ιδιοκτήτες μικρών επιχειρήσεων συχνά συμβιβάζονται με την ποιότητα αυτής της υπηρεσίας λόγω μικρότερου προϋπολογισμού. Είναι δύσκολο γεγονός ότι οι μικρές επιχειρήσεις και οι νεοσύστατες επιχειρήσεις καταλήγουν να αφήνουν τις ευκαιρίες που μπορούν να δημιουργηθούν με την επαγγελματική υπηρεσία SEO ή να χρησιμοποιούν μια φθηνή υπηρεσία SEO που δεν αποφέρει θετικά αποτελέσματα.
Οι ιδιοκτήτες μικρών επιχειρήσεων και οι νεοσύστατες επιχειρήσεις μπορούν να επωφεληθούν από επαγγελματικές υπηρεσίες SEO ακόμη και στον περιορισμένο προϋπολογισμό. Η καλύτερη λύση είναι η εύρεση μιας αξιόπιστης εταιρείας SEO με έδρα την Ινδία. Στην Ινδία, υπάρχουν πολλοί ειδικοί SEO που συνεργάζονται με την εταιρεία ψηφιακού μάρκετινγκ και προσφέρουν τις καλύτερες υπηρεσίες στον κλάδο. Μπορούν να σας παρέχουν τις απαιτούμενες υπηρεσίες SEO στον προϋπολογισμό σας. Οι μισθοί μπορούν να αποτελέσουν αντικείμενο διαπραγμάτευσης με ένα πρακτορείο SEO στην Ινδία για να λάβετε καλύτερες υπηρεσίες σε χαμηλότερες τιμές. Ωστόσο, μην πέφτετε σε φθηνή υπηρεσία SEO που χρεώνει λιγότερο και υπόσχεστε να δώσετε περισσότερα, καθώς η τεχνογνωσία έχει το δικό της κόστος. Πρέπει να δείτε το χαρτοφυλάκιο ή να κάνετε τις κατάλληλες ερωτήσεις προτού συνάψετε σύμβαση με μια εταιρεία για την επιχείρησή σας.
Οι ειδικοί SEO στην Ινδία είναι ειδικευμένοι στις βέλτιστες πρακτικές βελτιστοποίησης μηχανών αναζήτησης. Επίσης, υπάρχουν ορισμένοι ειδικοί SEO στην Ινδία, όπως ο Ash Vyas, οι οποίοι ειδικεύονται στη δημιουργία της καλύτερης στρατηγικής βελτιστοποίησης μηχανών αναζήτησης για μια επιχείρηση με δηλωμένο προϋπολογισμό. Οι επαγγελματίες SEO θα δημιουργήσουν ένα σαφές σχέδιο και θα μοιραστούν επίσης ποια μπορεί να είναι τα αναμενόμενα αποτελέσματα. Με αυτόν τον τρόπο μπορείτε να γνωρίζετε καλά την επένδυση και τις αποδόσεις σας. Αυτό βοηθά στη λήψη μιας καλύτερης επιχειρηματικής απόφασης.
Μια καλή ιδέα είναι να βρείτε και να συνάψετε σύμβαση με μια αξιόπιστη εταιρεία SEO από την Ινδία που προσφέρει τις καλύτερες υπηρεσίες SEO το συντομότερο δυνατό. Μπορείτε επίσης να ξεκινήσετε με μικρό προϋπολογισμό και περιορισμένες δραστηριότητες για να αρχίσετε να ευρετηριάζετε τις ιστοσελίδες σας και να ενισχύετε τις λέξεις-κλειδιά σας στις μηχανές αναζήτησης. Μην περιμένετε την τέλεια στιγμή ή μια μέρα που θα έχετε χιλιάδες δολάρια για να επενδύσετε στις καλύτερες υπηρεσίες SEO. Το να ξεκινήσετε νωρίς θα σας βοηθήσει να έχετε ταχύτερα αποτελέσματα όταν μπορείτε να προχωρήσετε επιθετικά με την προσέγγιση μάρκετινγκ. Μια αξιόπιστη εταιρεία SEO με έδρα την Ινδία θα σας βοηθήσει να καθορίσετε τα τρέχοντα και μελλοντικά σας σχέδια για να αποφέρετε καλά αποτελέσματα. Οι περισσότερες ευρετηριασμένες σελίδες ενίσχυσαν τις κατατάξεις και η αξιόπιστη επωνυμία της επιχείρησής σας με συνεχείς επαγγελματικές πρακτικές SEO θα διπλασιάσουν τα ερωτήματα, τις επιχειρήσεις και τα έσοδα. Κάθε μικρή επιχείρηση μπορεί να ξεκινήσει με διψήφια επένδυση στις επαγγελματικές υπηρεσίες SEO. Υπάρχουν πολλές εταιρείες SEO στην Ινδία που προσφέρουν χαμηλό προϋπολογισμό, αλλά προκύπτουν από προσανατολισμένες υπηρεσίες βελτιστοποίησης μηχανών αναζήτησης.

έρευνες από την εξορία

  • CraigWew

    12.04.2018

    p»їΗ σημασία της δημιουργίας σχέσης με τον πελάτη σε ακίνητα και γενικές πωλήσεις

    Η σημασία της δημιουργίας σχέσης με τον πελάτη.
    Η δημιουργία σχέσης με έναν πελάτη πρέπει να κερδίζεται και πρέπει να προσεγγίζεται ως πολύ αναπόσπαστο μέρος της διαδικασίας πωλήσεων.
    Για να κάνετε έναν πελάτη και τον εαυτό σας να σχετιστούν σε μια πραγματική βάση ένα προς ένα, περιλαμβάνει δύο πράγματα!
    Πρώτα, θα πρέπει να είστε ενήμεροι και να είστε εκεί! Δεύτερον, πρέπει να καταλάβετε ότι υπάρχουν δύο διαφορετικά στάδια που θα προκύψουν κατά τη διάρκεια αυτής της διαδικασίας.
    Α-Να είσαι εκεί-τι σημαίνει αυτό;
    o Οι περισσότεροι άνθρωποι δεν ακούν πραγματικά ένα άλλο άτομο καθώς μιλάει. Γενικά είναι τόσο απασχολημένοι με τη διατύπωση της επόμενης απάντησης ή δήλωσής τους που δεν μπορούσαν να ακούσουν πραγματικά.
    o Αν αυτό ακούγεται σαν εσάς, το να είστε εκεί σημαίνει να σκάσετε και να ακούσετε!
    Β-Ποιο είναι το πρώτο ή το αρχικό στάδιο;
    o Γενικά έχετε λίγα μόνο λεπτά για να καθιερωθείτε στο μυαλό των πελατών ως κάποιος με τον οποίο θέλουν να αντιμετωπίσουν.
    o Όταν έχετε αμφιβολίες, είναι καλύτερο να κάνετε πρώτα ερωτήσεις που θα τους τραβήξουν έξω και θα μιλήσουν για τον εαυτό τους.
    o Είναι επίσης πάντα ασφαλές να εμφανίζεσαι ως επαγγελματίας - δεν εννοώ στωικός ή στεγνός, αλλά κάποιος που ξέρει τι κάνουν και μιλάει και κοιτάζει το κομμάτι.
    Γ-Άλλα στάδια
    o Όσο περνά ο καιρός, μέσα από τη συζήτηση και τις ερωτήσεις που θα έχουν, είτε θα εδραιώσετε την ικανότητά σας είτε όχι.
    o Να γνωρίζετε ότι πιθανότατα θα σας μετρούν για λίγο. Τα καλά νέα είναι ότι κάποια στιγμή, εάν έχετε πετύχει να δημιουργήσετε σχέσεις, θα χαλαρώσουν και μπορείτε και οι δύο να συγκεντρωθείτε στην εύρεση ή την πώληση του σπιτιού.
    Τι άλλο μπορεί να με βοηθήσει να αναπτύξω σχέσεις;
    o Προσπαθώντας να κατανοήσετε διαφορετικούς τύπους προσωπικότητας και στη συνέχεια λέγοντας και κάνοντας τις σωστές ερωτήσεις.
    o Εάν έχετε καλή σχέση (να έχετε το ίδιο μήκος κύματος με τον πελάτη), τότε η πώληση έχει ουσιαστικά τελειώσει, τώρα είναι απλώς θέμα εύρεσης του κατάλληλου σπιτιού ή συμπλήρωσης των εγγράφων καταχώρισης.
    Τι γίνεται με τις διαφορετικές προσωπικότητες
    o Δεδομένου ότι αυτό δεν είναι ένα βιβλίο για την ψυχιατρική, προς το παρόν κατανοήστε δύο βασικούς τύπους.
    o Υπάρχουν εσωστρεφείς και εξωστρεφείς άνθρωποι.
    o Γνωρίζετε τον τύπο. Σκεφτείτε τρία άτομα που γνωρίζετε ότι ταιριάζουν σε κάθε κατηγορία.
    Τι γίνεται με τη γλώσσα του σώματος και τα πρότυπα ομιλίας;
    o Εάν μιλούν γρήγορα ή αργά, προσπαθήστε να μιμηθείτε τα μοτίβα ομιλίας τους.
    o Εάν μιλάνε δυνατά ή απαλά, κάντε το ίδιο. Γέρνουν προς τα εμπρός ή προς τα πίσω;
    o Περιττό να πούμε ότι υπάρχουν πολλά βιβλία γραμμένα για αυτό το θέμα. Απλώς να γνωρίζετε ότι είναι ένας σημαντικός παράγοντας - ειδικά όταν κάθεστε σε μια αίθουσα συνεδριάσεων ή στο σπίτι κάποιου και συζητάτε μια συμφωνία 400.000 $.
    Η ανάπτυξη σχέσεων είναι μια δεξιότητα που μπορεί να μάθει και να βελτιωθεί.
    o Όλοι έχουμε βιώσει έναν πωλητή που μας πούλησε κάτι και όμως δεν νιώθαμε ότι μας πουλούσαν. Ο λόγος είναι αυτός ή αυτή, σε έκανε να νιώσεις άνετα εκεί που τους εμπιστεύτηκες.
    Πώς αναπτύσσουμε τη σχέση;
    o Χρησιμοποιήστε τα μάτια και τα αυτιά σας και κάντε ερωτήσεις. Για να εξηγήσει
    o Χρησιμοποιήστε τα μάτια:
    o Κοιτάξτε το φόρεμά τους-το αυτοκίνητό τους-τα προσωπικά τους υπάρχοντα και εννοώ να τα κοιτάξετε και να αποκρυπτογραφήσετε τι σας λέει αυτό για αυτούς.
    o Χρησιμοποιήστε τα αυτιά:
    o Ακούστε τι λένε και κάντε ερωτήσεις για να καταλήξετε στο πραγματικό τους ΚΙΝΗΤΡΟ!
    Τώρα κατά τη διάρκεια όλης αυτής της συνομιλίας, πιθανότατα θα υπάρχουν ένα ή δύο πράγματα που θα ανακαλύψετε ότι έχετε κοινά μαζί τους. (Οικογένεια, γεωγραφικές περιοχές, ψάρεμα, κ.λπ.) Όταν συναντήσετε κοινά σημεία, ενημερώστε τους ότι είστε εξοικειωμένοι και μετά αφιερώστε ένα λεπτό για να το συζητήσετε μαζί τους.
    Ποιος είναι ο Στόχος;
    o Μόλις σας δεχτούν ως έναν από αυτούς, είστε σε θέση να έχετε πραγματικά μια εξαιρετική εμπειρία στις εκπτώσεις καθώς τώρα εργάζεστε μαζί και μετά ως ομάδα—δεν είστε πλέον ο πωλητής που βρίσκεστε τώρα σε συμβουλευτική θέση .
    o Να θυμάστε, ο πελάτης είτε θα σας επιτρέψει είτε όχι να εισέλθετε στον κόσμο του. Εάν το καταλαβαίνετε αυτό και εργάζεστε πραγματικά σκληρά για να γίνετε συμπονετικοί μαζί του/της, μπορείτε να κερδίσετε μια θέση εμπιστοσύνης. Στις περισσότερες περιπτώσεις, θα τους δείτε πραγματικά να χαλαρώνουν (γλώσσα του σώματος) όταν συμβεί αυτό όταν είστε στο δρόμο.
    o Για να το δείξετε αυτό, έχετε κάνει ποτέ μια ομιλία και έχετε παρατηρήσει ότι καθώς τελικά συνδέεστε με ένα μέλος του ακροατηρίου, θα κουνήσει καταφατικά το κεφάλι. Αυτά τα πράγματα μπορεί να φαίνονται τετριμμένα, αλλά δεν είναι.
    Κλείνοντας, αν μπορείτε να κερδίσετε την εμπιστοσύνη των πελατών, η πώληση ενός προϊόντος ή μιας υπηρεσίας είναι πολύ πιο εύκολη και η εμπειρία μπορεί να είναι απολαυστική για όλους τους εμπλεκόμενους.
    Να θυμάστε πάντα ότι το Win/Win είναι η καλύτερη κατάσταση.

Δήλωση συμβολοσειρών

Μια συμβολοσειρά στη γλώσσα C είναι ένας μονοδιάστατος πίνακας χαρακτήρων, το τελευταίο στοιχείο του οποίου είναι ο χαρακτήρας τέλους γραμμής - μηδέν (μια συμβολοσειρά που τερματίζεται με μηδέν, δηλαδή μια συμβολοσειρά με τερματισμό NULL).

Η δήλωση μιας μεταβλητής τύπου string στη γλώσσα C είναι δυνατή με τρεις τρόπους, δύο από τους οποίους αρχικοποιούν τη συμβολοσειρά τη στιγμή της δήλωσης.

Πρώτος τρόπος:

Δηλώσεις πίνακα χαρακτήρων (θυμηθείτε να προσθέσετε χώρο για το μηδενικό τερματικό):

Χαρ s;

Δεύτερος τρόπος:

Εκχωρήστε την αρχική τιμή στη μεταβλητή συμβολοσειράς (σε αυτήν την περίπτωση, ο μεταγλωττιστής μπορεί να υπολογίσει το μήκος της ίδιας της συμβολοσειράς):

Char s = "Παράδειγμα αρχικοποίησης συμβολοσειράς";

Στα δεξιά του σημείου εκχώρησης υπάρχει μια σταθερά συμβολοσειράς. Ένα μηδέν ('\0') προστίθεται αυτόματα στο τέλος της γραμμής. Οι σταθερές συμβολοσειράς χαρακτήρων τοποθετούνται σε μια κλάση στατικής μνήμης.

Τρίτος τρόπος:

Εμφανής ένδειξη ότι χρησιμοποιείται πίνακας. Στα αριστερά του σημείου ανάθεσης υπάρχει ένας δείκτης στο σύμβολο:

Char *s="Δεύτερη επιλογή προετοιμασίας";

Η μεταβλητή s θα είναι ένας δείκτης στη θέση στη μνήμη RAM όπου βρίσκεται η σταθερά συμβολοσειράς. Μια πιθανή παγίδα σε αυτή τη μορφή σημειογραφίας είναι ότι ένας δείκτης σε έναν χαρακτήρα αναφέρεται συχνά ως συμβολοσειρά. Η παρακάτω καταχώρηση είναι μόνο ένας δείκτης σε έναν χαρακτήρα, καθώς δεν υπάρχει χώρος για τη συμβολοσειρά:

Χαρ *s;

Εισαγωγή συμβολοσειράς από τυπική συσκευή εισόδου (πληκτρολόγιο)

Υπάρχει ένα σύνολο συναρτήσεων για εργασία με χορδές. Για είσοδο από μια τυπική συσκευή εισόδου (πληκτρολόγιο), οι λειτουργίες βιβλιοθήκης από την τυπική μονάδα εισόδου/εξόδου χρησιμοποιούνται συχνότερα: scanfΚαι παίρνει.

Για να εισαγάγετε μια συμβολοσειρά χρησιμοποιώντας τη συνάρτηση scanf, χρησιμοποιεί τη μορφή « %μικρό» και σημειώστε ότι το σύμβολο διεύθυνσης δεν χρησιμοποιείται πριν από το αναγνωριστικό γραμμής « & » , αφού ένας μονοδιάστατος πίνακας αντιπροσωπεύεται ήδη από έναν δείκτη στην αρχή του:

Scanf("%s", s);

Λειτουργία παίρνει ()διαβάζει χαρακτήρες μέχρι να φτάσει σε χαρακτήρα νέας γραμμής. Η συνάρτηση δέχεται όλους τους χαρακτήρες μέχρι τον χαρακτήρα νέας γραμμής, αλλά δεν τον περιλαμβάνει. Ένα τερματικό μηδέν ('\0') προστίθεται στο τέλος της γραμμής. Λειτουργία παίρνει ()τοποθετεί την ακολουθία χαρακτήρων που διαβάζονται από το πληκτρολόγιο σε μια παράμετρο συμβολοσειράς τύπου και επιστρέφει έναν δείκτη σε αυτήν τη συμβολοσειρά (εάν η λειτουργία ήταν επιτυχής) ή NULL (σε περίπτωση σφάλματος). Στο παρακάτω παράδειγμα, εάν η λειτουργία ολοκληρωθεί με επιτυχία, στην οθόνη θα εμφανιστούν δύο ίδιες γραμμές:

#περιλαμβάνω int main() ( char s; char *p; p=gets(s); printf(" \n Εισήχθη η συμβολοσειρά %s.",s); if (p) printf(" \n Η συμβολοσειρά %s ήταν εισήγαγε.", p); επιστροφή 0;)

Παρεμπιπτόντως, σημειώστε ότι η συνάρτηση gets χρησιμοποιείται συχνά για την εισαγωγή δεδομένων από το πληκτρολόγιο ως συμβολοσειρά με σκοπό την περαιτέρω μετατροπή από τη συνάρτηση sscanf στην επιθυμητή μορφή ή για προκαταρκτική ανάλυση των δεδομένων εισόδου, για παράδειγμα:

#περιλαμβάνω #περιλαμβάνω #περιλαμβάνω int main() ( char s; int x, err; do ( printf(" \n Εισαγάγετε έναν ακέραιο -> "); gets(s); err=sscanf(s, "%d",&x); if (err !=1) printf(" \n Σφάλμα εισαγωγής. " ) while (err!=1 printf("\n Εισάχθηκε ακέραιος αριθμός -> %d", x )

Εκτύπωση συμβολοσειρών σε τυπική έξοδο (οθόνη οθόνης)

Για την έξοδο συμβολοσειρών στην τυπική συσκευή εξόδου (οθόνη οθόνης), μπορείτε να χρησιμοποιήσετε δύο λειτουργίες printfΚαι βάζει. Η συνάρτηση printf μεταβιβάζεται ως μορφή "%s". Η ευκολία χρήσης αυτής της συνάρτησης είναι ότι εκτός από μια συμβολοσειρά, μπορείτε να εμφανίσετε αμέσως δεδομένα άλλων τύπων. Χαρακτηριστικό γνώρισμα βάζειείναι ότι μετά την εκτύπωση μιας γραμμής, μεταβαίνει αυτόματα στην επόμενη γραμμή.

Λειτουργίες για εργασία με χορδές

Για τη μετατροπή συμβολοσειρών στη γλώσσα C, παρέχεται η βιβλιοθήκη συμβολοσειρών. Κάθε λειτουργία έχει τη δική της μορφή εγγραφής (πρωτότυπο).

Οι πιο χρησιμοποιούμενες λειτουργίες συζητούνται σε αυτό το άρθρο. - ανάγνωση

Παράδειγμα προγραμμάτων (λίστα) που λειτουργούν με συμβολοσειρές



Έχετε ερωτήσεις;

Αναφέρετε ένα τυπογραφικό λάθος

Κείμενο που θα σταλεί στους συντάκτες μας: