PROBLEMA [C] Problema sulle stringhe e bool

Pubblicità

Cristian02

Nuovo Utente
Messaggi
29
Reazioni
2
Punteggio
26
Salve, ho riscontrato un problema sulle stringhe e BOOL
La traccia ho trovata su internet e mi chiedeva:
Acquisire da tastiera due stringhe S1, S2; verificare se S2è presente in S1.
Infine visualizzare un adeguato messaggio.
Ad esempio, se S1=”mia” e S2=”casamiaetua”, il risultato della funzione è true. Il programma visualizza “la parola ” +S1+” è contenuta in “+S2.
In caso di insuccesso il programma visualizza: “la parola ” +S1+” non è contenuta in “+S2.

in ho fatto
C:
#include <stdio.h>
bool Verifica(char *S1,char S2[]){
    printf ("\ninserisci una parola che vuoi ricercare nella S1: ");
    scanf("%s",S2);
    if(S2==S1){
        printf("%s : e' contenuta in : %s ",S1,S2);
    }else{
        printf ("%s : non è' contenuta in : %s",S1,S2);
    }
}

int main (){
    char S1[1000];
    char S2[1000];
    printf ("inserisci una parola o una frase: ");
    scanf("%s",S1);
    Verifica(S1,S2);
return 0;  
}
 
Ultima modifica da un moderatore:
Anzitutto perche' hai dichiarato diversamente i due parametri della funzione?
C:
bool Verifica(char *S1,char S2[]){
Non e' sbagliato, ma vorrei che capissi cosa stai facendo... e forse capiresti anche il motivo dell'errore:
C:
if(S2==S1){
Stai comparando due indirizzi diversi (non due stringhe) che saranno SEMPRE diversi!

Per comparare le stringhe devi anallizzare ogni singolo carattere nell'array S1 in rapporto con l'analogo dell'array S2... o usare le funzioni di libreria (se puoi/vuoi)
 
Ultima modifica:
Mi ha anticipato Brutpitt, quindi aggiungo solo che probabilmente dovrai anche importare stdbool.
E poi, non stai facendo tornare true o false, cosa che dovresti fare, ma stai stampando con printf.

Temo non ti siano chiare cose ancora più alla base dei puntatori.
--- i due messaggi sono stati uniti ---
E anche la lettura degli input da verifica è sbagliata, almeno concettualmente.
 
Innanzi tutto ti prego di cambiare il titolo, “linguaggio IN C” proprio non si può leggere (scusa la pignoleria)
Come ti hanno già detto, tu stai comparando due puntatori, perché in C non esiste il tipo “stringa”, mentre invece la traccia dell’esercizio ti chiede se una data stringa contiene una seconda stringa. Ora, ci solo librerie in C che operano su vettori di caratteri, una delle funzioni fa esattamente quello, ma penso che l’esercizio richieda che tu lo faccia senza fare uso di librerie. Si risolve con due cicli innestati, testando un carattere alla volta.
 
Innanzi tutto ti prego di cambiare il titolo, “linguaggio IN C” proprio non si può leggere (scusa la pignoleria)
Come ti hanno già detto, tu stai comparando due puntatori, perché in C non esiste il tipo “stringa”, mentre invece la traccia dell’esercizio ti chiede se una data stringa contiene una seconda stringa. Ora, ci solo librerie in C che operano su vettori di caratteri, una delle funzioni fa esattamente quello, ma penso che l’esercizio richieda che tu lo faccia senza fare uso di librerie. Si risolve con due cicli innestati, testando un carattere alla volta.
Ciao, ci rivediamo ?, ti ringrazio che mi rispondi,
Allora 1) il titolo l'ho cambiato.
2) l'errore l'ho coretto , ma non del tutto almeno mi stampa le prime due printf


C:
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

bool Verifica(char *S1,char *S2){
    if(S2==S1){
        printf("%s ; è in contenuta in : %s ",S1,S2);
        return true;
    }
    if(S2!=S2){
        printf ("%s ; non è contenuta in : %s ",S1,S2);
        return false;
    }
}

int main (){
    char S1[1000];
    char S2[1000];
    printf ("inserisci una parola o una frase: ");
    scanf("%s",S1);
    printf ("\ninserisci una parola che vuoi per ricercare nella S1: ");
    scanf("%s",S2);
    Verifica(S1,S2);
return 0;   
}
 
Il titolo lo hai cambiato, ma ancora non è conforme al regolamento (nuovamente, scusa la pedanteria ma articoli in un giusto formato aiutano la ricerca nel forum specie nelle sezioni tecniche. Guarda le discussioni in rilievo in questa sezione dove spiega il formato del titolo.

Come ti abbiamo già detto, in questo caso NON puoi fare il confronto di puntatori.
 
Pubblicità
Pubblicità
Indietro
Top