[C++] Come trovare un carattere in un vector di stringhe (NON in un vector di array di caratteri)
Ho un vector t in cui in ogni cella c'è una parola (stringa) e voglio scrivere una funzione in cui io scrivo il carattere che voglio cercare, ad esempio 'a', e la funzione ritorna quante volte in tutto il vector compare quel carattere.
Io ho scritto una funzione usando std::find, ma non funziona e comunque voglio scrivere una funzione senza usare questo tipo di funzioni già fatte.
Mi spiegate come si fa?
P.s. Lo so che a questa domanda è già stato risposto un sacco di volte ma in ogni risposta si usa std::find.
Grazie!
Io ho scritto una funzione usando std::find, ma non funziona e comunque voglio scrivere una funzione senza usare questo tipo di funzioni già fatte.
int char_occurrence(character ch, vector<string> t) { int count = 0; cout << "Enter character" << endl; cin >> ch; for(unsigned i = 0; i <t.size(); i++) { if( ch è nel vector //qui avevo usato std::find) count ++; } return count; }
Mi spiegate come si fa?
P.s. Lo so che a questa domanda è già stato risposto un sacco di volte ma in ogni risposta si usa std::find.
Grazie!
Risposte
Perché il tipo nella funzione è character? E' un typedef di char? Che senso ha? Inoltre perché, se la funzione riceve come valore di input un carattere, dovrebbe chiederne un altro in input da console?
Siccome hai una stringa per ogni elemento del vettore, devi avere due cicli: uno per il vettore e un altro per la stringa interna. Quindi il codice avrà la forma:
Siccome hai una stringa per ogni elemento del vettore, devi avere due cicli: uno per il vettore e un altro per la stringa interna. Quindi il codice avrà la forma:
int char_occurrence(char ch, const std::vector< std::string > &t) { int count = 0; for (int i = 0; i < t.size(); ++i) { for (int j = 0; j < t[i].size(); ++j) { if (t[i][j] == ch) { ++count; } } } return count; }
Volendo invece usare all'estremo un approccio più dichiarativo e basato sulle librerie standard, userei std::count e std::accumulate invece di std::find.. Qualcosa come il seguente:
int char_occurrence(char ch, const std::vector< std::string > &t) { return std::accumulate(t.begin(), t.end(), 0, [ch](int c, const std::string &s) { return c + std::count(s.begin(), s.end(), ch); }); }
È molto interessante, ma questo codice è inutile nel mio problema analogo
In che senso? Potresti postare il testo del problema (dalla tua risposta immagino di aver frainteso quello che vuoi fare)?
@apatriarca
Non è la stessa persona, è spam!
Non è la stessa persona, è spam!
