Newsgroup: it.comp.lang.c++
Titolo: If con stringa

Scusate la mia ignoranza in fatto di programmazione, ma siccome dovrei dare
l' esame di fondamenti di informatica, vorrei sapere come si fa a porre una
condizione equivalente a:
Se la stringa
char str[2]
è "si" allora chiama la procedura x,
altrimenti
chiama la procedura y
                                    Thanx


L'array str può contenere solo due caratteri e quindi non è possibile
memorizzarci la stringa "si" che invece ne contiene tre. Nel caso che
str fosse di tre caratteri allora puoi fare
if ( strcmp( str, "si" ) == 0 )
    x();
else
    y();
Ricordati di includere
#include <cstring>
EMG

chiama la procedura y
per stringhe C (char*) puoi utilizzare la funzione strcmp
if (!strcmp(str, "si") x(/* parametri */);
strcmp e` definita in cstring (standard C++) 
o string.h (per lo standard C).
In C++ comunque e` preferifile utilizzare il tipo
std::string  (#include <string>) che definisce operator==
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------

                                     Thanx
dunque in teoria dovresti fare:
if(str[2])
    then call x
    else call y
tutto qui!
Cya
RexRock
--
"Non li temete dunque; perche' non c'e' niente di nascosto che non debba
        essere scoperto, ne' di occulto che non debba essere conosciuto"
                                               (Matteo 10:26)

Scusami, ma il codice che hai scritto non è  per caso in Visual Basic?
Se così fosse hai fatto il grave errore di andare a capo dopo il then, non 
sei andato a capo dopo l'else e la parentesi tonda dell'if non è
necessaria. 
' ammentendo il caso che la stringa sia posta in una textbox si potrebbe
fare
If text1.text == "si" Then
  	Call x 'procedura definita in qualche altra parte
Else
            Call y 'altra procedura
End If 
Cmq mi chiedo il perché di questa domanda in un newsgroup di C++. Infatti,
non dico che sono un esperto, ma le procedure in C++ e in C si fanno
utilizzando le funzioni void.
Inoltre una stringa composta da 2 caratteri deve essere messa dentro un
array di 3.
In C++ si potrebbe fare:
          char array[3];
           void x() {}
           void y() {}
          // altro codice
int main() {          
	if (array == "si") x();
            else y();
            return =;
}
oppure
          char* puntatore;
          void x() {}
          void y() {}
          // altro codice
int main() {
            if(puntatore == "si") x();
            else y();
            return 0;
}
 

Per evitare polemiche da parte dei programmatori in VB ho scitto un = di
troppo nel codice.


Scusate non avevo letto bene il testo.
Cmq quello che ho scritto io non č sbagliato semplicemente č
semplificato al max:
if(str[2] == 'si'){
    esegui la procedura x
}else{
    esegui la procedura y
    }
cosě č perfetto e semplice.
Le dichiarazioni di funzione non le metto credo che il mio codice
sia facilmente comprensibile. ^__^



In teoria non si fa proprio in quel modo.
In C esiste la funzione strcmp che permette
il confronto tra stringhe C (terminate da '\0')
In C++ c'e` la classe std::string che definisce
operator==.


}
Non funziona, in C/C++ non e` definito alcun operatore == che
abbia come argomenti due char*.


Ma con gli array, come ha sottolineato Paolo non è possibile farlo. Inoltre
tu selezioni il 3 elemento dell'array e chiedi se è uguale si. Ma come può
una variabile char contenere una stringa a meno che non sia un puntatore?
Potrebbe essere fatto con un array di puntatori a char ma è un altro
discorso.

Forse è stato un tuo errore di battitura ma con i puntatori mi sembra
corretto.
Cmq se ho così difficoltà  con gli array è meglio che torni al VB.

 abbia come argomenti due char*.
E` definito eccome, solo che la sua semantica e`
"eguaglianza di indirizzo" (identita`), NON di
contenuto, quindi non e` probabilmente quello
che qui si desidera.
Alex

 E` definito eccome, solo che la sua semantica e`
Sorry, hai perfettamente ragione, non avevo pensato al
confronto dei puntatori in quanto tali.
Paolo
-- 
------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
 
http://www.cli.di.unipi.it/~marotta
------------------------------------------------