Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    32

    [C] confronto stringhe strcmp

    codice:
     
    #include <stdio.h> 
    #include <string.h>   
    int strcmp(char* s , char* r) { 
    int i = 0;   
    while (s[i] == r[i] && s[i] != '\0' && r[i] != '\0') 
    i++;  
    return (int) (s[i] - r[i]);  }    
    int main() {         
    int i;         
    char s[50];         
    char r[50];            
    printf("stampa s:");         
    gets(s);           
    printf("stampa r:");         
    gets(r);                  
    strcmp(s,r);        
     printf ("Il risultato del confronto e' : ", s[i]-r[i]);         
    return 0;
     }
    Ho scritto questo codice che dovrebbe prendere in input due frasi s e r, confrontarle tra loro e riportare in output il risultato del confronto. Il problema e' che la funzione ha parametri di tipo char , trattandosi di frasi ma ciò che dovrebbe ritornare e' invece ( almeno secondo il mio ragionamento) di tipo int quindi il compilatore mi da questo errore alla riga 4:
    conflicting types for 'strcmp'

    Come posso risolvere il problema? Grazie mille in anticipo

  2. #2
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Credo faccia conflitto perché la funzione strcmp esiste già nella libreria string.h ..
    Ma magari ho detto una boiata , non so
    Tra l'altro essendo la funzione con un return dovresti inserire il "risultato" in una variabile, cosa che tu non fai perchè richiami la funzione come se fosse void. Poi avendo incluso la libreria string.h non so se quella funzione strcmp sia effettivamente la tua o quella della libreria..

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Elimina l'include <string.h> e nel main correggi le due righe

    strcmp(s,r);
    printf ("Il risultato del confronto e' : ", s[i]-r[i]);

    sostituendole con la sola riga

    printf ("Il risultato del confronto e' %d : ", strcmp(s,r) );
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    32
    Ora mi chiede correttamente le due stringhe ma digitando sia per la prima stringa che per la seconda " ciao" , il risultato del confronto risulta essere 98

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    Ora mi chiede correttamente le due stringhe ma digitando sia per la prima stringa che per la seconda " ciao" , il risultato del confronto risulta essere 98
    Strano...a me invece mi stampa uno 0...è quello che volevi, no?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    32
    Sisi ! Proprio quello che volevo !


    codice:
    #include<stdio.h>
     
    int strcmp ( char *s , char *r ){
        
    int i=0;
        
    while ( s[i]==r[i] && s[i] != '\0' && r[i] != '\0' )
        i++;
        
         return (int) (s[i]-r[i]); }
     
     
     int main () {
        
        char s[50];
        char r[50];
        
        printf("stampa s:");
        gets(s);
        
        printf("stampa r:");
        gets(s);
        
        strcmp ( s,r );
        printf("il risultato del confronto e':%d", strcmp(s,r));
        
        return 0; }
    M sembra di averlo sistemato correttamente -_-? Forse mi è sfuggito qualcosa.. Questo e' ciò che ho compilato

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    codice:
    #include<stdio.h>
     
    int strcmp ( char *s , char *r ){
        
    int i=0;
        
    while ( s[i]==r[i] && s[i] != '\0' && r[i] != '\0' )
        i++;
        
         return (int) (s[i]-r[i]); }
     
     
     int main () {
        
        char s[50];
        char r[50];
        
        printf("stampa s:");
        gets(s);
        
        printf("stampa r:");
        gets(s);
        
        strcmp ( s,r );
        printf("il risultato del confronto e':%d", strcmp(s,r));
        
        return 0; }
    Piccolo errore...quando fai
    codice:
    printf("stampa r "); gets(s);
    dovresti fare
    codice:
    printf("stampa r : ");gets(r);

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    O, meglio ancora, fgets(stdin, 50, r);
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    32
    capra! Non l'avevo proprio visto ! Faccio un ultima domanda ( probabilmente molto stupida)..se le stringhe che inserisco sono diverse cosa mi devo aspettare come output ? Nel senso , inserendo ai e di oppure si e se o asso assi, L'output dovrà essere uguale ? Cambierà L'output la posizione della diversità delle due stringhe o la quantità di differenze tra esse? Grazie ancora!

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    capra! Non l'avevo proprio visto ! Faccio un ultima domanda ( probabilmente molto stupida)..se le stringhe che inserisco sono diverse cosa mi devo aspettare come output ? Nel senso , inserendo ai e di oppure si e se o asso assi, L'output dovrà essere uguale ? Cambierà L'output la posizione della diversità delle due stringhe o la quantità di differenze tra esse? Grazie ancora!
    Dovrai aspettarti come output la differenza (convertita in intero) fra gli ultimi caratteri confrontati.
    Ad esempio se inserisco le parole "si" e "se" la funzione (tramite il ciclo while) si ferma a s[1] e r[1],cioè i caratteri 'i' ed 'e'...la funzione ritorna proprio la differenza convertita in intero fra questi caratteri.
    Se invece inserissi le parole "sei" e "see" il risultato non cambia perchè il ciclo si fermerebbe a s[2] e r[2]...la funzione ritorna sempre la differenza fra 'i' ed 'e'.

    Per vedere a quale numero fa riferimento un certo carattere ti rimandoQua
    Spero di essere stato chiaro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.