PROBLEMA [C] Problema sulle stringhe e bool

Cristian02

Nuovo Utente
25
2
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:

BrutPitt

Utente Attivo
1,166
1,262
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:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.
Post unito automaticamente:

E anche la lettura degli input da verifica è sbagliata, almeno concettualmente.
 

Andretti60

Utente Èlite
6,440
5,091
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.
 

Cristian02

Nuovo Utente
25
2
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;   
}
 

Andretti60

Utente Èlite
6,440
5,091
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.
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili