Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - programmino con array dinamico di char in C
Forum - C/C++ - programmino con array dinamico di char in C

Avatar
R4_p_4891.mv (Normal User)
Newbie


Messaggi: 1
Iscritto: 21/11/2013

Segnala al moderatore
Postato alle 21:29
Giovedì, 21/11/2013
Ciao a tutti,

dovrei realizzare questo: un programmino semplice semplice solo che non ne riesco a venirne a capo.
Siccome l'argomento è basilare, credo sia interessante a futura memoria anche per altri alle prime armi come me.

devo prendere una frase (nota bene) a caso in input (ese a caso: "hello! What a beautiful world")
e stamparla al contrario (ese: "beatiful a what hello!").

Mi sono spiegato bene :( ? Non dobbiamo, insomma, rigirare la stringa al contrario ma invertire l'ordine delle parole!

Dunque io ho pensato che la soluzione più ovvia fosse un array bidimensionale dinamico.

[0][h][e][l][l][o][\0]
[1][w][h][a][t][\0]
[2][a][\0]
[3][e][a][t][f][l][\0]
[4][w][o][r][l][d][\0]

Ora:
1) occorre allocare dinamicamente la memoria per la colonna di puntatori (a puntatore?) lunga quanto sono le parole, e le parole le vorrei dividere solo dallo spazio, non dall'invio (con l'invio vorrei terminare l'emissione della frase generale)!
2) Ogni stringa, allocata dinamicamente anche essa deve contenere una parola.
3) Ogni stringa deve essere "attaccata" (ed è qui il mio grande problema) alla colonna come da figura.

Io ho pensato alle funzioni di libreria per strcat. Ho pensato ad un buffer, ad un char **ptr etc etc
ma non ci cavo un ragno da un buco!

Chi mi aiuta?

Grazie mille in anticipo,

mv

Ps io intanto continuo a sbatterci la testa, ché tanto questo è il destino dei programmatori ;)
Poi vorrei essere collaborativo il più possibile :k: e non stare ad aspettare la pappa pronta!

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 22:47
Giovedì, 21/11/2013
puoi fare così: alloca un array di N puntatori a char, con N numero delle parole. Per ogni puntatore alloca X + 1 byte in memoria, con X numero di lettere in una singola parola. Il + 1 perchè alla fine deve esserci il carattere terminatore ( '\0' ). Poi crei una stringa e fai un sacco di strcat. Questo ultimo pezzo è il meno impegnativo, e dipende dal primo........ Mi pare una soluzione sensata.......

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 1:15
Venerdì, 22/11/2013
Parlando di semplice visualizzazione io opterei per un semplice approccio ricorsivo

Codice sorgente - presumibilmente C++

  1. void getword(char *p)
  2. {
  3.         if(!p) return;
  4.         getword(strtok(NULL, " "));
  5.         printf("%s ", p);
  6. }
  7.  
  8. int main ()
  9. {
  10.         char str[] = "invertire l'ordine delle parole";
  11.         getword(strtok(str, " "));
  12.  
  13.         return 0;
  14. }



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote