[C++] Controllo stringa in input e dare output diversificato

Desideri ricevere supporto tecnico informatico? Hai qualche domanda di ambito informatico? Pubblicala qua!
Rispondi
NONONONO
Messaggi: 7
Iscritto il: 11/06/2021, 13:01

[C++] Controllo stringa in input e dare output diversificato

Messaggio da NONONONO »

mi potreste aiutare con questo programma che stavo cercando di creare per un mio amico?
In particolare per la sezione if, vorrei fare in modo che se chi lo usa digita uno di quei nomi esce una scritta particolare, se era possibile lo vorrei fare in if, dato che poi mi serve lo stesso principio per delle scritte successive...
Ringrazio in anticipo...

Codice: Seleziona tutto

#include<stdio.h>
#include<iostream>
#include<fstream>
#include<string.h>
#include<stdlib.h>
#include<Windows.h>
#include<string>
using namespace std;
int main (int argc, char *argv[], char *envp[])

{
char nome [100], scelta1 [2];
 
{
cout<< ("inserisci un nome perfavore (niente spazzi)... ");
cin>>(nome);
//Easter egg dei nomi

if (nome=="NONONONO")
cout<<("NONONONOI? Il mio creatore?");

else if (nome=="L" & nome=="Elle")
cout<<("Si, e io snon il Detective Conan Edogawa");

else if (nome=="Conan" & nome=="Edogawa")
cout<<("Salve signor Shinichi kudo, ha capito chi sono gli uomni in nero?");

else if (nome=="Shinichi" & nome=="Kudo")
cout<<("Salve signor Kudo, come vanno le ricerche?");

else if (nome=="Eren") 
cout<<("Jeager? bello essere un gigante, vero?");

else if (nome=="Levi")
cout<<("Levi Ackerman? dovevi uccidere Eren!");

else if (nome=="Rufy")
cout<<("Cappelino, hai trovato il One Piece?");

else if (nome=="Ace")
cout<<("Ace come? Pugno di fuoco?");

else if (nome=="ABCD")
cout<<("Poca fantasia?");


cout<<(endl);
cout<< ("ciao "); 
cout<<(nome); 
...continuo del programma
Avatar utente
Dragone2
Amministratore
Messaggi: 107
Iscritto il: 30/07/2014, 18:35
Località: Italia
Contatta:

Messaggio da Dragone2 »

Ciao,
Forse ti conviene fare una funzione che va a vedere se la stringa digitata è contenuta in un array di stringhe definite da te.
Qui ti converrebbe usare una struct, dove associ la stringa nome ad una frase speciale.
Alternativamente puoi sfruttare 2 array, uno con i nomi particolari e uno con le frasi. Devi però fare attenzione a mantenere gli stessi indici.

Quindi una cosa tipo:

Codice: Seleziona tutto

nomiSpeciali = ["pippo", "pluto", "paperino"];
frasiSpeciali = ["Ciao pippo", "Come va pluto?", "Saluti Paperino!"];
Queste 2 variabili potresti definirle globali, quindi fuori dal blocco main e fare una funzione che prende come parametro "nome", lo confronta con "nomiSpeciali" e se corrisponde, stampa la frase.

Tradotto in codice:

Codice: Seleziona tutto

#include <iostream>

using namespace std;
//Definisco una variabile globale che indica il totale degli elementi presenti nell'array
int totaleNomi = 3;

//Definisco un array di stringhe, nel quale definisco i nomi speciali che mi interessano
string nomiSpeciali[3] = {"pippo", "pluto", "paperino"};

//Definisco le frasi che voglio far comparire, facendo attenzione che abbiano lo stesso indice della loro associazione con i nomi, quindi posizione 0 si riferisce a nomiSpeciali[0] --> frasiSpeciali[0]
string frasiSpeciali[3] = {"Ciao pippo", "Come va pluto?", "Saluti Paperino!"};

//Definisco una funzione che, data una stringa in input, ricerca tale stringa nell'array nomiSpeciali e se trova una corrispondenza stampa la frase associata
void controllaNome(string nome) {
    for(int i = 0; i < totaleNomi; i++) {
        if(nomiSpeciali[i] == nome) {
            cout << frasiSpeciali[i] << endl;
            break; //Fermo il ciclo
        }
    }
}

int main()
{
    controllaNome("paperino"); //Qui basta che vari con "pippo", "pluto", "paperino" per ottenere output diversi.

    return 0;
}
Immagine
NONONONO
Messaggi: 7
Iscritto il: 11/06/2021, 13:01

Messaggio da NONONONO »

Grazie, ci provo...
NONONONO
Messaggi: 7
Iscritto il: 11/06/2021, 13:01

Messaggio da NONONONO »

Dragone2 ha scritto: 13/06/2021, 17:51 Ciao,
Forse ti conviene fare una funzione che va a vedere se la stringa digitata è contenuta in un array di stringhe definite da te.
Qui ti converrebbe usare una struct, dove associ la stringa nome ad una frase speciale.
Alternativamente puoi sfruttare 2 array, uno con i nomi particolari e uno con le frasi. Devi però fare attenzione a mantenere gli stessi indici.

Quindi una cosa tipo:

Codice: Seleziona tutto

nomiSpeciali = ["pippo", "pluto", "paperino"];
frasiSpeciali = ["Ciao pippo", "Come va pluto?", "Saluti Paperino!"];
Queste 2 variabili potresti definirle globali, quindi fuori dal blocco main e fare una funzione che prende come parametro "nome", lo confronta con "nomiSpeciali" e se corrisponde, stampa la frase.

Tradotto in codice:

Codice: Seleziona tutto

#include <iostream>

using namespace std;
//Definisco una variabile globale che indica il totale degli elementi presenti nell'array
int totaleNomi = 3;

//Definisco un array di stringhe, nel quale definisco i nomi speciali che mi interessano
string nomiSpeciali[3] = {"pippo", "pluto", "paperino"};

//Definisco le frasi che voglio far comparire, facendo attenzione che abbiano lo stesso indice della loro associazione con i nomi, quindi posizione 0 si riferisce a nomiSpeciali[0] --> frasiSpeciali[0]
string frasiSpeciali[3] = {"Ciao pippo", "Come va pluto?", "Saluti Paperino!"};

//Definisco una funzione che, data una stringa in input, ricerca tale stringa nell'array nomiSpeciali e se trova una corrispondenza stampa la frase associata
void controllaNome(string nome) {
    for(int i = 0; i < totaleNomi; i++) {
        if(nomiSpeciali[i] == nome) {
            cout << frasiSpeciali[i] << endl;
            break; //Fermo il ciclo
        }
    }
}

int main()
{
    controllaNome("paperino"); //Qui basta che vari con "pippo", "pluto", "paperino" per ottenere output diversi.

    return 0;
}
Comunque come dicevo prima, volevo usare if o qualcosa di simile perché nel continuo (ancora da scrivere) ci dovranno essere varie scelte... quindi mi serviva se c'era una funzione simile a if ma con le scritte al posto dei numeri... comunque quella per i nomi inziali va benissimo
Avatar utente
Dragone2
Amministratore
Messaggi: 107
Iscritto il: 30/07/2014, 18:35
Località: Italia
Contatta:

Messaggio da Dragone2 »

C'è l'istruzione switch volendo, come alternativa all'if, ti rimando a questa pagina: https://www.html.it/pag/15489/le-istruzioni-switch/
Qua trovi qualche altro esempio: https://www.codingcreativo.it/switch-case-in-c/
Immagine
NONONONO
Messaggi: 7
Iscritto il: 11/06/2021, 13:01

Messaggio da NONONONO »

Dragone2 ha scritto: 13/06/2021, 18:25 C'è l'istruzione switch volendo, come alternativa all'if, ti rimando a questa pagina: https://www.html.it/pag/15489/le-istruzioni-switch/
Qua trovi qualche altro esempio: https://www.codingcreativo.it/switch-case-in-c/
molte grazie, se mi serve altro scrivo sempre qui...
NONONONO
Messaggi: 7
Iscritto il: 11/06/2021, 13:01

Messaggio da NONONONO »

NONONONO ha scritto: 13/06/2021, 19:17
Dragone2 ha scritto: 13/06/2021, 18:25 C'è l'istruzione switch volendo, come alternativa all'if, ti rimando a questa pagina: https://www.html.it/pag/15489/le-istruzioni-switch/
Qua trovi qualche altro esempio: https://www.codingcreativo.it/switch-case-in-c/
molte grazie, se mi serve altro scrivo sempre qui...

Codice: Seleziona tutto

#include<stdio.h>
#include<iostream>
#include<fstream>
#include<string.h>
#include<stdlib.h>
#include<Windows.h>
#include<string>
using namespace std;
int totaleNomi = 12;

string nomiSpeciali[12] = {"Davide", "L", "Elle","Conan", "Edogawa", "Shinichi", "Kudo", "Eren", "Levi", "Rufy", "Ace", "ABCD"  };

string frasiSpeciali[12] = {"Davide?", "Si, e io sono il Detective Conan Edogawa", "Si, e io sono il Detective Conan Edogawa",
 "Salve signor Shinichi kudo, ha capito chi sono gli uomini in nero?","Salve signor Shinichi kudo, ha capito chi sono gli uomini in nero?", "Salve signor Kudo, come vanno le ricerche?", 
 "Salve signor Kudo, come vanno le ricerche?",  
 "Jeager? bello essere un gigante, vero?", "Levi Ackerman? dovevi uccidere Eren!",  "Cappelino, hai trovato il One Piece?", "Ace come? Pugno di fuoco?", "Poca fantasia?"  };

void controllaNome(string nome) {
    for(int i = 0; i < totaleNomi; i++) {
        if(nomiSpeciali[i] == nome) {
            cout << frasiSpeciali[i] << endl;
            break;
        }
    }
}

int main (int argc, char *argv[], char *envp[])
{
char nome [100], scelta1 [5]; //scrivere elemento e [numero caratteri consentiti], 

 
cout<< ("inserisci un nome perfavore (niente spazzi)... ");
cin>>(nome);
{
    controllaNome(nome);

}


cout<<(endl);
cout<< ("ciao "); 
cout<<(nome); 

cout<<(endl);
cout<<("vuoi inziare? (digita Si o No a seconda della tua preferenza.)");
cout<<(endl);

cin>>(scelta1);

 
 switch ('scelta1')
 {case 'Si':
 cout<<("Ottimo iniziamo subito, il tempo di spiegarti alcune cose...");
 cout<<(endl);
 break;
 
 case 'No':
 cout<<("Quindi, ");
 cout<<(nome);
 cout<<(" arrivederci");
 cout<<(endl);
 system ("pause");
 return 0;
 break;
 }


 //Creazione del "manuale" e delle domande e risposte...
system ("pause");
return 0;
}
non funziona la funzione switch...
Avatar utente
Dragone2
Amministratore
Messaggi: 107
Iscritto il: 30/07/2014, 18:35
Località: Italia
Contatta:

Messaggio da Dragone2 »

Ciao,
Non è che non funziona, è che lo stai utilizzando in maniera scorretta. Al suo interno, quindi dentro switch(), dovresti passargli una variabile, non una stringa fissa. Dovresti passargli switch(scelta1). 'scelta1' non equivale alla variabile scelta1, ma ad una stringa.
Riguardati gli esempi che ti avevo inviato
Immagine
Rispondi