[C] Come suddividere una stringa in coppie di caratteri

di il
24 risposte

[C] Come suddividere una stringa in coppie di caratteri

Salve a tutti!
Mi servirebbe una mano su questa procedura in C.
In pratica, presa in input una stringa, devo restituire la stessa stringa a coppie di due caratteri.
Ad esempio, la stringa "CIAO MI CHIAMO LUCA" viene trasformata in "CI AO MI CH IA MO LU CA".

Quindi, ho pensato prima di tutto di togliere gli spazi all'interno della mia stringa iniziale, e l'ho fatto in questo modo:

void divisione (char *mess)
{
    int i, c=0, n=strlen(mess); //c=0: CONTATORE DEGLI SPAZI
    char appoggio[100];         //VARIABILE DI APPOGGIO IN CUI CI COPIO TUTTI I CARATTERI DIVERSI DA SPAZIO

    //TOGLIERE LO SPAZIO
    for (i=0; i<n; i++)
    {
        if (mess[i] != ' ')
        {
            appoggio[c]=mess[i];
            c++;
        }
    }
}
In questo modo, "CIAO MI CHIAMO LUCA" dovrebbe divenire "CIAOMICHIAMOLUCA"
Ora, dopo il for, dovrei effettuare la divisione che vi spiegavo prima. Un aiutino?

24 Risposte

  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Specifica:
    ti serve restituire una stringa con una sequenza di coppie di lettere separate da spazi
    oppure ti serve restituire una sequenza di coppie di lettere
    oppure una sequenza di array di 2 caratteri
    oppure....

    fai un esempio dell'uscita che ti aspetti
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Lucabarba ha scritto:


    Ad esempio, la stringa "CIAO MI CHIAMO LUCA" viene trasformata in "CI AO MI CH IA MO LU CA".

    StandardOil ha scritto:


    Specifica:
    ti serve restituire una stringa con una sequenza di coppie di lettere separate da spazi
    oppure ti serve restituire una sequenza di coppie di lettere
    oppure una sequenza di array di 2 caratteri
    oppure....

    fai un esempio dell'uscita che ti aspetti
    Ipotizzo.
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Credo anch'io in effetti, ma sempre bene essere sicuri
    quindi è abbastanza facile
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Mi sorgono un paio di dubbi:
    - e se il numero di caratteri è dispari?
    - il parametro attuale passato alla funzione è costituito da un array statico o dinamico?
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Il modo più semplice è fare il contrario di come hai fatto per togliere gli spazi. Ovvero un ciclo con all'interno un contatore che azzeri ogni volta che arrivi a 2; quando arrivi a 2 metti lo spazio e prosegui con gli altri caratteri.
    Per gli altri problemi del codice che hai scritto ne parliamo dopo...
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Nippolo ha scritto:


    - il parametro attuale passato alla funzione è costituito da un array statico o dinamico?
    qui ammetto la mia ignoranza:
    cosa cambia, lato funzione che riceve la stringa?
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    In pratica, come gestisci la lunghezza del nuovo vettore?
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Beh quello lo gestirei dinamico
    è quello in ingresso che non capisco cosa cambierebbe
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Non mi sembra ci siano cambiamenti se la stringa viene passata ad una funzione.
    Visto che non é in nessuno dei due casi una stringa interna alla funzione la sizeof() restituisce la dimensione del puntatore (ergo non ha molto senso utilizzarla), mentre la strlen (che, é vero che é nella string.h, ma é una libreria cosí fondamentale per le stringhe che non includerla é volersi del male) continua a funzionare (a patto di ricordarsi di tenere un ultimo carattere per il terminatore). Inoltre sia che sia statica, e a maggior ragione se é dinamica (ovvero di dimensioni conosciute a runtime, NON modificabili mentre esiste, non é una lista) ne conosci la lunghezza (non che serva usarla se il carattere terminatore é mantenuto)
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    StandardOil ha scritto:


    Beh quello lo gestirei dinamico
    è quello in ingresso che non capisco cosa cambierebbe
    Cambia che se scegli dinamico bisogna innanzitutto aggiustare l'intestazione della funzione e poi bisogna regolarsi di conseguenza anche nel contesto in cui la suddetta funzione viene richiamata.

    @silente scusami ma non ho capito cosa intendi dire!
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Scusa, non ti seguo
    Il suo prototipo dal lato dei parametri non sarà sempre
    
    Funzione(char * stringa)
    
    Semmai cambia tra
    char * funzione (char * input)
    Se restituisco un array dinamico allocato dalla funzione
    Oppure
    void funzione (char * input, char * output)
    Se invece aggiorno un array preallocato dal chiamante


    Scritto da telefonino, scusa la grafia
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Intendevo che nel caso dinamico l'intestazione diventa (volendo restare nell'ambito di una procedura con un solo argomento):
    void fun(char **str)
    Lato main invece potremmo avere per esempio qualcosa del genere:
    char *p = "ciao mondo";
    fun(&p);
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Troppo stanco, non capisco
    Ci penso domani
  • Re: [C] Come suddividere una stringa in coppie di caratteri

    Allora ragazzi, cerco di riassumervi brevemente:
    • quello che devo generare è una coppia di caratteri separati da spazio, vi ho fatto anche l'esempio sopra;
    • nel caso in cui la stringa ha elementi dispari, l'ultima lettera viene lasciata sola (ad esempio "ARMADIO" diviene "AR MA DI O")
Devi accedere o registrarti per scrivere nel forum
24 risposte