Περισσότερα
Πώς μπορώ να επαναλάβω τις λέξεις μιας συμβολοσειράς;
Προσπαθώ να επαναλάβω τις λέξεις μιας συμβολοσειράς.
Η συμβολοσειρά μπορεί να θεωρηθεί ότι αποτελείται από λέξεις που χωρίζονται από κενά.
Σημειώστε ότι δεν ενδιαφέρομαι για τις συναρτήσεις συμβολοσειρών της C ή αυτού του είδους τον χειρισμό/πρόσβαση χαρακτήρων. Επίσης, παρακαλώ δώστε προτεραιότητα στην κομψότητα έναντι της αποτελεσματικότητας στην απάντησή σας.
Η καλύτερη λύση που έχω αυτή τη στιγμή είναι η εξής:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string s = "Somewhere down the road";
istringstream iss(s);
do
{
string subs;
iss >> subs;
cout << "Substring: " << subs << endl;
} while (iss);
}
Υπάρχει ένας πιο κομψός τρόπος για να το κάνω αυτό;
2885
3
Αυτός είναι ο αγαπημένος μου τρόπος για την επανάληψη σε μια συμβολοσειρά. Μπορείτε να κάνετε ό,τι θέλετε ανά λέξη.
Η STL δεν διαθέτει ήδη μια τέτοια μέθοδο.
Ωστόσο, μπορείτε είτε να χρησιμοποιήσετε τη συνάρτηση [
strtok()
][1] της C χρησιμοποιώντας το μέλος [std::string::c_str()
][2], είτε να γράψετε τη δική σας. Εδώ είναι ένα δείγμα κώδικα που βρήκα μετά από μια γρήγορη αναζήτηση στο Google ("STL string split"):Λαμβάνεται από το:
Η χρήση του
std::stringstream
, όπως το έχετε κάνει, λειτουργεί τέλεια και κάνει ακριβώς αυτό που θέλατε. Αν όμως ψάχνετε για διαφορετικό τρόπο να κάνετε τα πράγματα, μπορείτε να χρησιμοποιήσετε [std::find()
][1]/[std::find_first_of()
][2] και [std::string::substr()
][3].Ακολουθεί ένα παράδειγμα: