Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [c] le stringhe
Forum - C/C++ - [c] le stringhe

Avatar
spode (Normal User)
Pro


Messaggi: 151
Iscritto: 03/09/2010

Segnala al moderatore
Postato alle 12:23
Domenica, 03/10/2010
Codice sorgente - presumibilmente Plain Text

  1. printf("Inserisci una parola: ");
  2.     scanf("%s",&s1);
  3.  
  4.     for(m=strlen(s1),k=0;m!=-1;m--,k++)
  5.     {
  6.         strcpy(s2[k],s1[m]);
  7.         }
  8.  
  9.         printf("\nLa stringa al contrario è %s",s2);



restituisce "segment fault". mi spiegate bene le stringhe? sono parecchi programmi che faccio e tutti danno lo stesso errore


Spode
PM Quote
Avatar
ShellCoder_ (Member)
Newbie


Messaggi: 1
Iscritto: 09/09/2010

Segnala al moderatore
Postato alle 14:46
Domenica, 03/10/2010
Codice sorgente - presumibilmente Plain Text

  1. scanf("%s",&s1);



E' sbagliato...
s1 è già di per se un puntatore a stringa (char*)
quindi fai così:

Codice sorgente - presumibilmente Plain Text

  1. scanf("%s",s1);



Inoltre fai un uso sbagliato di strcpy... non puoi passare come argomenti delle variabili di tipo char, devi passare puntatori a stringhe, quindi char*

Il prototipo è

Codice sorgente - presumibilmente C++

  1. char * strcpy ( char * destination, const char * source );


Ultima modifica effettuata da ShellCoder_ il 03/10/2010 alle 14:53


"Man is free at the moment he wishes to be" [cit. Voltaire]
PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 435
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 15:26
Domenica, 03/10/2010
Premetto che ciò provato ma non sono riuscito ad implementare un algoritmo di reverse(Grave:pat:) però ho fatto una piccola ricerca e ho trovato una funzione del c che fa questa cosa strrev().
la funzione strrev inverte l'ordine dei caratteri di una stringa, il suo prototipo è il seguente:
Codice sorgente - presumibilmente C/C++

  1. char *strrev(char *str);


Il carattere terminatore resta in fondo alla stringa. La funzione restituisce un puntatore a str
esempio:
Codice sorgente - presumibilmente C/C++

  1. #include <stdio.h>
  2. main(){  
  3.        char x[10];
  4.        printf("Inserisci la stringa: ");
  5.        scanf("%s",x);              
  6.        printf("\n\nstringa di partenza %s",x);      
  7.        printf("\n\nstringa rovesciata %s\n\n", strrev(x));      
  8.        system("PAUSE");
  9. }




Bonny
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 20:55
Domenica, 03/10/2010
dai, non è complicato scrivere un reverse.

Codice sorgente - presumibilmente C++

  1. char * reverse(const char *strToRev)
  2. {
  3.         int l = strlen(strToRev);
  4.         int l2 = 0;
  5.         char *s = (char *)malloc(sizeof(char) + l);
  6.        
  7.         while(l2 < l)
  8.         {
  9.                 s[l2] = strToRev[(l - l2) - 1];
  10.                 l2++;
  11.         }
  12.         return s;
  13. }



anche se ammetto che non piace neanche a me questa soluzione.
Sarebbe meglio che fosse l'utilizzatore ad istanziare la stringa di ritorno, in questo modo.

Codice sorgente - presumibilmente C++

  1. void reverse(const char *strToRev, char *strReverse, int l)
  2. {
  3.         int l2 = 0;
  4.        
  5.         while(l2 < l)
  6.         {
  7.                 strReverse[l2] = strToRev[(l - l2) - 1];
  8.                 l2++;
  9.         }
  10. }



in questo modo è l'utilizzatore a gestire totalmente la vita della stringa strReverse, sia in fase si creazione sia in fase di distruzione.


PS: non li ho provati ma credo non ci siano errori strani...


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote
Avatar
spode (Normal User)
Pro


Messaggi: 151
Iscritto: 03/09/2010

Segnala al moderatore
Postato alle 21:41
Martedì, 05/10/2010
grazie a tutti. comunque preferisco la prima risposta, perchè non mi va di imparare a memoria le funzioni.


Spode
PM Quote