PDA

View Full Version : [C]Acquisire parole con vettori


stgww
23-09-2007, 13:35
Ciao. Ho un esercizio da fare che chiede di far scrivere all'utente due parole e poi stamparle con uno spazio in mezzo.
Il libro scrive che bisogna fare due vettori contenenti le due parole e poi sommarli. Ma come si sommano due vettori ? e lo spazio in mezzo.
Thx a lot

cionci
23-09-2007, 15:45
Sommarli è un'espressione non esatta...magari sarebbe meglio dire unirli...

carter100
23-09-2007, 16:02
Prendi la dimensione dei due vettori e ne allochi uno nuovo con la dimensione somma dei 2 + 1 (che conterrà lo spazio); dopo se usi la funzione strcat () concateni i due vettori uno alla volta

stgww
23-09-2007, 16:07
Sommarli è un'espressione non esatta...magari sarebbe meglio dire unirli...
Scusa l'espressione , ma sonoa ncora un novellino.

Prendi la dimensione dei due vettori e ne allochi uno nuovo con la dimensione somma dei 2 + 1 (che conterrà lo spazio); dopo se usi la funzione strcat () concateni i due vettori uno alla volta
Riesci a farmi un esempio?
Thx

carter100
23-09-2007, 16:29
Ti faccio un esempio veloce:
per ipotesi le due parole sono nelle stringhe a e b;
fai int num1=strlen (a) per avere la dimensione della stringa a;
int num2=strlen(b) per la dimensione di b;
a questo punto allochi una stringa char c[num1+num2+1];
ora hai una stringa c che conterrà alla fine a+b;
se fai strcpy (c,a) hai copiato in c il contenuto di a;
ora se fai strcat (c," "); e strcat (c,b) dovresti avere in c il contenuto di a e b
intervallato con lo spazio

cionci
23-09-2007, 16:33
Suppongo che l'esercizio chiedesse di operare con i vettori, senza funzioni sulle stringhe e senza allocazione dinamica, altrimenti avrebbe poco senso.

stgww
23-09-2007, 16:46
Io comandi come strcpy e strcpa non li ho mai usati, ma poi non lo so, la proff ci ha chiesto se l'hanno scorso avevamo fatto le stringhe e noi gli abbiamo risposto di no e lei ci ha detto che per far riceve al computer delle parole intere bisogna trattarle come array di lettere.
@cionci: cosa è che ti sembra non vada tra il programma di carter e quello che devo fare io?
Thx a lot

carter100
23-09-2007, 16:49
Io comandi come strcpy e strcpa non li ho mai usati,


Allora come non detto, non leggere quello che ho scritto, devi tradurti i comandi in semplici istruzioni c perchè l'esercizio abbia un senso

stgww
23-09-2007, 17:07
Allora come non detto, non leggere quello che ho scritto, devi tradurti i comandi in semplici istruzioni c perchè l'esercizio abbia un senso

E che significa tradurre i comandi in semplici istruzioni c ?

cionci
23-09-2007, 17:32
Crei due vettori per due stringhe. Crei un vettore per la stringa risultante.
Leggi le stringhe da input.

- Con un while scorri la prima stringa fino al carattere \0 che è quello di fine stringa e copi ogni carattere nel vettore della stringa risultate, non devi copiare lo \0.
- Copi il carattere spazio nella stringa risultante.
- Con un while scorri anche la seconda stringa fino allo \0, questa volta copi anche lo \0 (per avere una stringa valida deve essere sempre presente come ultimo carattere) e copi il contenuto nella stringa risultante.

In queste tre operazioni userai sempre lo stesso indice per scorrere gli elementi del vettore risultante.

carter100
23-09-2007, 17:33
ad esempio per la strlen scorri la stringa fino al '\0' per sapere la sua dimensione; per la copia nella stringa c devi spostare ogni singolo elemento in ogni posizione delle 2 stringhe
Edit: come non detto, ti ha già spiegato tutto (tra l'altro anche meglio) Cionci

stgww
23-09-2007, 18:37
Grazie per l'aiuto, ma non capisco come in pratica posso eseguire l'operazione di copiare i caratteri da un array all'altro.

cionci
23-09-2007, 18:43
s3[j] = s1[i];

stgww
23-09-2007, 18:48
s3[j] = s1[i];

:doh: Che stupido così banale e non ci avevo pensato.
Thx. Appena ho tempo provo

stgww
23-09-2007, 19:09
Io ti ringrazio cionci, ma a me non viene, sarò che sbaglio qualche cosa io...
Ti costa troppo appena hai 2 minuti farmelo? :kiss: :D

cionci
23-09-2007, 19:11
Se te lo faccio non impari niente ;)

Prova intanto a copiare il primo vettore sul vettore risultato.

stgww
23-09-2007, 19:22
Se te lo faccio non impari niente ;)

Prova intanto a copiare il primo vettore sul vettore risultato.

:cry: Hai ragione!!!
Cmq ho trovato sul sito della uni di roma due righe sulle stringhe, c'è scritto un sacco di roba che la proff non ci ha detto. Me lo leggo e e poi ci provo

stgww
23-09-2007, 19:30
Mah...questo è quello che ho fatto (si prega di non prendere in giro, mettersi a ridere, chiamare amici e raccontargli questa barzelletta etc..)
#include <stdio.h>
#include <stdlib.h>
char word1[7],words[20];
int i;
int main(int argc, char *argv[])
{
printf("Esercizio prova Array di caratteri\n");
for(i=0;i<7;i++)
scanf("&s", &word1[i]);
words[i]=word1[i];
for(i=0;i<7;i++)
printf("%s", words[i]);


system("PAUSE");
return 0;
}
non viene dopo avergli inserito la parola ciao e premuto invio dice (null (null e lo ripete

cionci
23-09-2007, 19:32
No...parti da qui:

#include <stdio.h>
#include <stdlib.h>
char word1[7], words[20];
int i;
int main(int argc, char *argv[])
{
printf("Esercizio prova Array di caratteri\n");

scanf("%s", word1);

Ora devi copiare carattere per carattere da word1 in words, fino a che il carattere corrente è /0.

stgww
23-09-2007, 19:58
No...parti da qui:

#include <stdio.h>
#include <stdlib.h>
char word1[7], words[20];
int i;
int main(int argc, char *argv[])
{
printf("Esercizio prova Array di caratteri\n");

scanf("%s", word1);

Ora devi copiare carattere per carattere da word1 in words, fino a che il carattere corrente è /0.

Così?
words[i]=word1[i]

carter100
23-09-2007, 20:21
Così?
words[i]=word1[i]

sì, con i che va da 0 fino a che word[i]!='\0'

stgww
23-09-2007, 20:35
Scusatemi..., ma non capisco, magari lo rivediamo domani, con la mente più lucida (senza tre ore di matematica e fisica alle spalle ragiono meglio.):D
Ciao