Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] puntatori e stringhe

    Ciao, io ho 2 stringhe s1 e s2 e 2 interi i1 e i2 e voglio inserire in una terza stringa i caratteri di s1 a partire dall'indice i1 e i caratteri di s2 a partire dall'indice s2.

    Ho pensato di utilizzare i puntatori e fare così:

    codice:
    void inserire (char *s1, char *s2, char *s3, int i1, int i2) {
                     char *p1= s1+i1, *p2=s2+i2;
                     while (*p1 && *p2) {
                            *s3++=*s1++;
                            *s3++=*s2++;
                     } /* while */
                     .
                     . 
                     ...
    Vi sembra corretto?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma vuoi inserire alternativamente un carattere della prima e un carattere della seconda, oppure prima la prima e poi la seconda ... ?

    Fai un esempio di stringhe di partenza e di arrivo ...

  3. #3
    Originariamente inviato da oregon
    Ma vuoi inserire alternativamente un carattere della prima e un carattere della seconda, oppure prima la prima e poi la seconda ... ?

    Fai un esempio di stringhe di partenza e di arrivo ...
    Ad esempio:
    s1: SOCCORSO
    i1: 4
    s2: MOLA
    i2: 2

    Dovrei ottenere: ORSOLA

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... allora il codice dovrebbe essere

    codice:
    void inserire(char *s1, char *s2, char *s3, int i1, int i2)
    {
      char *p1= s1+i1, *p2=s2+i2;
    
      while (*p1) *s3++=*p1++;
      while (*p2) *s3++=*p2++;
    
      *s3=0;
    }
    Ovviamente nessun controllo di buffer overflow e' fatto sulla stringa di destinazione.

    (Ma il codice che avevi proposto non lo avevi provato?)

  5. #5
    IL codice l'ho poi provato ed effettivamente non andava.
    Più o meno l'idea c'era.
    Però nell'istruzione che hai scritto
    codice:
    *s3=0
    intendevi forse
    codice:
    *s3='\0'  /* cioè il terminatore. */
    Comunque grazie

  6. #6
    Ho provato ma non funziona...
    Forse sbaglio io su qualcos'altro.

    Posto l'intero codice:
    codice:
    #include <stdio.h>
    #define L_S 30   /* Lunghezza stringhe */
    
    void leggi (char *s1, char *s2, int i1, int i2){
            printf ("Inserire s1: ");
            scanf ("%s", s1);
            printf ("\n");
            printf ("Inserire s2: ");
            scanf ("%s", s2);
            printf ("\nInserire i1: ");
            scanf ("%d", &i1);
            printf ("\nInserire i2: ");
            scanf ("%d", &i2);
    } /* leggi */
    
    
    /*
    IP s1
    IP s2
    OP s3
    */
    
    void indici (char *s1, char *s2, char *s3, int i1, int i2) {
                   char *p1= s1+i1, *p2=s2+i2;
                   while (*p1)
                         *s3++=*p1++;
                   while (*p2)
                         *s3++=*p2++;
                   s3='\0';
    } /* mescola */           
    
    int main () {
        char s1[L_S], s2[L_S], s3[L_S];
        int i1,i2;
        leggi(s1,s2,i1,i2);
        indici(s1,s2,s3,i1,i2);
        printf ("\n\nStringa alternata: %s\n\n\n", s3);
        system ("pause");
    } /* main */

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da devil89
    IL codice l'ho poi provato ed effettivamente non andava.
    Più o meno l'idea c'era.
    Però nell'istruzione che hai scritto
    codice:
    *s3=0
    intendevi forse
    codice:
    *s3='\0'  /* cioè il terminatore. */
    Comunque grazie
    Puoi tranquillamente usare l'istruzione

    *s3 = 0;

    perche' perfettamente legale ed equivalente a quella che hai scritto ...

  8. #8
    Grazie dell'informazione.

    Potresti darmi una mano su questo messaggio che ho postato?

    Grazie

  9. #9
    Devi passare le variabili i1 e i2 non per valore :
    codice:
           void leggi (char *s1, char *s2, int i1, int i2)
    ma per riferimento :
    codice:
           void leggi (char *s1, char *s2, int &i1, int &i2)
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da devil89
    Ho provato ma non funziona...
    Forse sbaglio io su qualcos'altro.
    ...
    Sì ... infatti ... riporto il codice con le correzioni in grassetto ...

    codice:
    #include <stdio.h>
    #define L_S 30   /* Lunghezza stringhe */
    
    void leggi (char *s1, char *s2, int *i1, int *i2){
            printf ("Inserire s1: ");
            scanf ("%s", s1);
            printf ("\n");
            printf ("Inserire s2: ");
            scanf ("%s", s2);
            printf ("\nInserire i1: ");
            scanf ("%d", i1);
            printf ("\nInserire i2: ");
            scanf ("%d", i2);
    } /* leggi */
    
    
    /*
    IP s1
    IP s2
    OP s3
    */
    
    void indici (char *s1, char *s2, char *s3, int i1, int i2) {
                   char *p1= s1+i1, *p2=s2+i2;
                   while (*p1)
                         *s3++=*p1++;
                   while (*p2)
                         *s3++=*p2++;
                   *s3='\0'; // o anche *s3=0; 
    } /* mescola */           
    
    int main () {
        char s1[L_S], s2[L_S], s3[L_S];
        int i1,i2;
        leggi(s1,s2,&i1,&i2);     
        indici(s1,s2,s3,i1,i2);
        printf ("\n\nStringa alternata: %s\n\n\n", s3);
        system ("pause");
    } /* main */
    Fondamentalmente hai usato male i puntatori ...

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.