2015-04-17 19 views
8

Dato un array di stringhe, ho bisogno di trovare il numero di stringhe in esso contenute.trova il numero di stringhe nell'array 2D di stringhe

ho seguito this

ma questo non funziona se sto passando questo in una funzione.

Ecco il codice che ho provato

#include<string> 
#include<iostream> 
#include<cstdio> 
#include<cstring> 
using namespace std; 

int f1(char* input1[]) 
{ 

    string s=""; 

    cout<<sizeof(input1)<<endl; //print 4 
    cout<<sizeof(char*)<<endl; //print 4 
    int l=sizeof(input1)/sizeof(char*); 
    //giving l=1 here but should be 8 
} 

int main() 
{ 
    char *str2[]={"baba","sf","dfvf","fbfebgergrg","afvdfvfv","we","kkhhff","L"}; 
    int l=sizeof(str2)/sizeof(char*); 
    cout<<l<<endl; //print 8 
    cout<<sizeof(str2)<<endl; //print 32 
    cout<<sizeof(char*)<<endl; //print 4 
    f1(str2); 
} 
+0

Conoscete il compilatore per il quale dovete risolvere quella domanda? – MikeMB

risposta

8

sizeof(char*) ti dà la dimensione del puntatore char* (che è 4 sul vostro sistema).

sizeof(str2) fornisce le dimensioni dell'array str2. Ci sono 8 elementi, ognuno dei quali è un tipo di puntatore. Quindi la dimensione totale del sistema è 8 x 4 = 32.

Per ottenere la lunghezza di una stringa, utilizzare strlen.

Considerare std::vector<std::string>> come alternativa in C++.

+0

questo non funziona strlen (* input1) ancora dando 4 come output in funzione. – Guru

+2

@Guru Questo perché 'input1' non è una matrice. È 'char **'. Si prega di leggere [Come utilizzare gli array in C++] (http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c), in particolare la parte di conversione da matrice a puntatore. – jrok

+0

@jrok: quindi cosa dovrei fare per ottenere l'uscita 8 in funzione ?? – Guru

1

Non si può conoscere la lunghezza di un array se si ha solo un puntatore. E hai solo un puntatore perché non puoi passare array per valore. Gli array passati a una funzione decadranno automaticamente su un puntatore e il tipo di argomento char* foo[] equivale a char** foo. size_of non aiuta perché indica solo la dimensione del puntatore stesso.

Passare la lunghezza come argomento a f1. O meglio ancora, usa std::vector o std::array.

non riesco a modificare la funzione data prototipo

Beh, questo è un peccato. Quindi devi ricorrere a qualche inganno. La soluzione più semplice consiste nel memorizzare la lunghezza in una variabile globale anziché in un parametro di funzione.

Un'altra possibilità è un valore di terminazione Ad esempio, terminare sempre l'array con nullptr e non consentire mai ad altri elementi di avere quel valore. Nello stesso modo in cui le stringhe di c sono terminate con carattere null. Quindi è possibile interrompere l'iterazione dell'array quando si incontra nullptr. Ma suppongo che tu non possa modificare neanche l'array.

+0

che conosco molto bene, ma in realtà è una domanda di concorso online in cui ho bisogno di questa funzionalità. e lì non posso modificare il prototipo di funzione dato.Non c'è altro modo in cui non ho bisogno di modificare il prototipo di f1 – Guru

+0

@Guru se lo sai molto bene, allora perché stai chiedendo perché 'size_of' non funziona? Ad ogni modo, puoi ricorrere a un parametro globale anziché a un parametro. – user2079303

Problemi correlati