Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [C++] Swap di stringhe

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107

    swap di stringhe

    ho creato questa function per invertire l'ordine di visualizzazione di due array di tipo stringa,
    ma non so perchè mi inverte solo la prima lettera, come se non si rendesse conto che si tratta di una stringa o come se non considerasse la dereferenziazione a indirizzo base... non capisco perchè.

    codice:
    void cswap(char *p, char *q) { char tmp; tmp=*p; *p=*q; *q=tmp; }


    grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    nessuno ne sa il motivo???

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    p è l'indirizzo del primo carattere
    *p è il primo carattere
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    non sei stato molto esaustivo, come faccio a invertire tutte le stringhe e non solo la prima lettera??

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da darksergio
    non sei stato molto esaustivo, come faccio a invertire tutte le stringhe e non solo la prima lettera??
    Studiando come vanno gestite le stringhe in C
    Una stringa non si copia in un'altra usando l'operatore di assegnamento ma si utilizza una funzione particolare, strcpy. Per usarla devi includere l'header string.h.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    io non voglio copiare una stringa su un altra....
    voglio invertirle di posizione... es:

    mario rossi lucia verdi
    ---------->
    lucia verdi mario rossi

    con lo string copy dovrei crearmi una stringa fittizia e invertire tutto
    vorrei evitarlo se è possibile con la notazione a puntatore, non si può?

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da darksergio
    con lo string copy dovrei crearmi una stringa fittizia e invertire tutto
    vorrei evitarlo se è possibile con la notazione a puntatore, non si può?
    No. Per scambiare due stringhe ti serve necessariamente una terza stringa di appoggio.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Oddio, in realtà puoi scambiare un carattere per volta iterando, ma il problema è che devi essere sicuro che entrambe le stringhe abbiano capacità sufficiente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    si, ho fatto, ora ho un secondo problema....
    per modificare il tabellone punteggi di una corsa ciclistica
    ho scritto questo if che dovrebbe effettuarmi vari swap:


    codice:
    if ( tempi_classifica[e]> tempi_classifica[i]) { cswap(corridore[e].nome, corridore[i].nome); cswap(corridore[e].cognome, corridore[i].cognome); iswap(&tempi_classifica[e],&tempi_classifica[i]); iswap(&ciclisti_classifica[e],&ciclisti_classifica[i]); iswap(&caselle_classifica[e],&caselle_classifica[i]); iswap(&giri_classifica[e],&giri_classifica[i]); iswap(&caselle_giro_classifica[e],&caselle_giro_classifica[i]); }
    con queste funzioni:

    iswap: (per gli interi)

    codice:
    #include <stdio.h> #include "mylib.h" void iswap(int *p, int*q) { int tmp; tmp=*p; *p=*q; *q=tmp; }
    cswap: (per le stringhe)

    codice:
    #include <stdio.h> #include <string.h> #include "mylib.h" void cswap(char *p, char *q) { char tmp[20]; strcpy(tmp,q); strcpy(q,p); strcpy(p,tmp); }
    stranamente tutti gli iswap si muovono cordinatamente fra loro, mentre i cswap, seppur muovendosi non cordinano gli spostamenti con gli iswap.

    mi spiego meglio:

    ho questa layout:

    'nome' 'cognome' n oo:mm:ss n_giri caselle_percorse

    da n in poi si muovono tutti cordinatamente mentre il nome ed il cognome rimangono vicini fra loro ma si spostano scambiano seguendo una logica a me sconosciuta xD

    mi stanno fumando le orecchie xD

    grazie in anticipo, anche se questa è davvero difficile

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 © 2025 vBulletin Solutions, Inc. All rights reserved.