come trovare il numero di elementi in una matrice di stringhe in c ++?

ho una serie di stringhe.

std :: string str [10] = {“one”, “two”}

Come trovare quante stringhe sono presenti all’interno dell’array str[] ?? C’è qualche funzione standard?

Se vuoi contare tutti gli elementi sizeof tecnica funzionerà come gli altri hanno sottolineato. Se si desidera contare tutte le stringhe non vuote, questo è un modo ansible utilizzando la funzione count_if standard.

 bool IsNotEmpty( const std::string& str ) { return !str.empty(); } int main () { std::string str[10] = {"one","two"}; int result = std::count_if(str, &str[10], IsNotEmpty); cout << result << endl; // it will print "2" return 0; } 

Ci sono dieci stringhe, anche se hai solo inizializzato due di esse:

 #include  int main (void) { std::string str[10] = {"one","two"}; std::cout << sizeof(str)/sizeof(*str) << std::endl; std::cout << str[0] << std::endl; std::cout << str[1] << std::endl; std::cout << str[2] << std::endl; std::cout << "===" << std::endl; return 0; } 

L'output è:

 10 one two === 

Se vuoi contare le stringhe non vuote:

 #include  int main (void) { std::string str[10] = {"one","two"}; size_t count = 0; for (size_t i = 0; i < sizeof(str)/sizeof(*str); i++) if (str[i] != "") count++; std::cout << count << std::endl; return 0; } 

Questo produce 2 come previsto.

Non so che userei un array di std :: stringhe. Se stai già utilizzando l’STL, perché non prendere in considerazione un vettore o un elenco? Almeno in questo modo si potrebbe semplicemente capire con std :: vector :: size () invece di lavorare brutto sizeof magia. Inoltre, quella dimensione della magia non funzionerà se la matrice è memorizzata nell’heap piuttosto che nella pila.

Basta fare questo:

 std::vector strings(10); strings[0] = "one"; strings[1] = "two"; std::cout << "Length = " << strings.size() << std::endl; 

Puoi sempre usare countof macro per ottenere il numero di elementi, ma ancora una volta, la memoria è stata allocata per 10 elementi e questo è il conteggio che otterrai.

Il modo ideale per farlo è

 std::string str[] = {"one","two"} int num_of_elements = sizeof( str ) / sizeof( str[ 0 ] ); 

Dal momento che conosci la dimensione. Si potrebbe fare una ricerca binaria per non null / vuota.

str [9] è vuoto
str [5] è vuoto
str [3] non è vuoto
str [4] è vuoto
Hai 4 oggetti.

Non ho davvero voglia di implementare il codice, ma sarebbe abbastanza veloce.

Basta usare questa funzione per array di stringhe 1D:

 template // String can be 'string' or 'const string' unsigned int NoOfStrings (String (&arr)[SIZE]) { unsigned int count = 0; while(count < SIZE && arr[count] != "") count ++; return count; } 

Uso:

 std::string s1 = {"abc", "def" }; int i = NoOfStrings(s1); // i = 2 

Mi sto solo chiedendo se possiamo scrivere un meta programma modello per questo! (poiché tutto è noto al momento della compilazione)