Εργαστήριο Τεχνολογίας Λογισμικού
+3 votes
489 views

Πως μπορω να συγκρινω δυο πινακες τυπου char οι οποιοι περιεχουν συμβολοσειρα?

in progintro by (350 points) | 489 views
0

Μπορείς να συγκρίνεις 2 string με την std::strcmp
https://en.cppreference.com/w/cpp/string/byte/strcmp

1 Answer

+2 votes

Μπορείς να χρησιμοποιήσεις μια συνάρτηση βιβλιοθήκης όπως η strcmp()

C strcmp() - programiz

Παράδειγμα χρήσης:

#include <iostream>
#include <cstring>

using namespace std;

int main() {
        char a[4];
        char b[4];
        strcpy(a, "aaa");
        strcpy(b, "bbb");
        // prints "aaa"
        cout << a << endl;
        // prints "bbb"
        cout << b << endl;
        // prints -1
        cout << strcmp(a, b) << endl;
        return 0;
}
by (3.0k points)
edited by
0

Οταν δοκιμαζω να το χρησιμοποιησω μου βγαζει συνεχεια τιμη 1 ακομα και αν οι συμβολοσειρες ειναι διαφορετικες...

0

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

0

Εμένα δεν μου φαίνεται καθόλου περίεργο από την άλλη να βγάζει 1 σε διαφορετικές συμβολοσειρές. Αν βγάλει 1 σε ίδιες, εκεί έχουμε το πρόβλημα :)

Από το manpage:

The strcmp() function returns an integer less than, equal to, or greater than zero if s1 is found, respectively, to be less than, to match, or be greater than s2.

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

Το παράδειγμα χρήσης προφανώς δεν βοηθάει γιατί δεν κάνει if πάνω στο strcmp (ώστε να δείξει τι κάνεις μετά) απλά τυπώνει το αποτέλεσμα :p

0

το θεμα ειναι οτι οτι μεγεθος και αν εχουν οι συμβολοσειρες μου οποια περιπτωση και να παρω μεταξυ των δυο συμβολοσειρων παντα θα βγαζει 1.Μαλλον κατι δεν κανω καλα....

0

@Soft Silverwind: συγκεκριμένα επιστρέφει τη διαφορά των χαρακτήρων στα οποία η ισότητα έσπασε για πρώτη φορά
πχ strcmp("aaa", "aab") επιστρέφει -1 γιατι 'a' - 'b' = -1.
Επίσης όταν δεν υπάρχει χαρακτήρας πχ strcmp("a", "aaa" ) επιστρέφει -97 γιατι θεωρεί την μη-υπαρξη 2ου χαρακτήρα στο πρώτο string σαν 0 ( at least on my computer :P )

@vipolus κατι σου ξεφεύγει .. στείλε αν θες το κομμάτι κώδικα που το κάνει

301 questions

289 answers

288 comments

903 users