PDA

Visualizza la versione completa : [C] Inserire parole in un array e stamparle


artmar
27-01-2011, 12:04
Inserire in un vettore una frase le cui parole sono separate da uno o più spazi. Inserire le parole, una per riga, in una matrice char e stamparla.
Ad esempio, se la frase è “mi piace l’estate” la matrice sarà:
mi
piace
l’estate


segmentation fault


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void insvet(char v[100]);
void insmat(char mat[100][100],char vet[100]);
void stampa(char mat[100][100]);

int main(int argc, char **argv)
{ char vet[100],m[100][100];
insvet(vet);
insmat(m,vet);
stampa(m);


}

void insvet(char v[100]){


printf("inserisci frase: \n");
scanf("%[^\n]",v);

}

void insmat(char mat[100][100],char vet[100])
{ int i,j,k;
char c;
i=0;
j=0;
k=0;

while(vet[i]!='\0')
{

c=strcmp(vet,"");
if(c==0)
{
j++;
mat[j][k]=vet[i];
i++;


}
else
{

mat[j][k]=vet[i];
k++;
i++;


}
}
}

void stampa(char mat[100][100]){

int i,j;

while(mat[i][j]!='\0'){

printf("%c",mat[i][j]);
i++;
j++;

}
}

_Alfabetagamma_
27-01-2011, 13:39
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
int i=0, esci=0;
char str[200];
char *result = NULL;
char m[20][20];

printf("Inserisci la tua stringa: ");

for(i=0; i<200 && esci!=1; i++)
{
scanf("%c", &str[i]);
if(str[i]=='\n') esci=1;
}
str[i-1]='\0';


i=0;
result = strtok( str," ");
strcpy(m[i], result);


while( result != NULL ) {
printf("%s\n", m[i]);
i++;
result = strtok( NULL, " " );
if(result!=NULL)
strcpy(m[i], result);
}

system("pause");
}

Così è molto più facile. Cmq al posto che i while usa i for che sono molto meglio :)

_Alfabetagamma_
27-01-2011, 13:42
Originariamente inviato da artmar



void insmat(char mat[100][100],char vet[100])
{ int i,j,k;
char c;
i=0;
j=0;
k=0;

while(vet[i]!='\0')
{

c=strcmp(vet," "); /*qui mancava lo spazio*/
if(c==0)
{
j++; /*qui ti sposti subito e lasci dentro mat[0] non si sa che cosa*/
mat[j][k]=vet[i];
i++;


}
else
{

mat[j][k]=vet[i];
k++;
i++;


}
}
}

void stampa(char mat[100][100]){

int i,j;

while(mat[i][j]!='\0'){

printf("%c",mat[i][j]);
i++; /*se incrementi sia j che i insieme ti stampa solo 0;0 1;1 2;2......... eccc*/
j++;

}
}

I commenti sono alcuni errori che commettevi :)

artmar
27-01-2011, 15:09
grazie mille.... :) provo con i for , che errori stupidi

Laikius91
27-01-2011, 15:44
Mi spiegate questo pezzetto di codice?



void insvet (char v[100])
{
printf("inserisci frase: \n");
scanf("%[^\n]",v);
}


In particolare, la scanf così scritta cosa indica?


p.s. dire che i cicli for sono migliori degli altri è un po' limitativo: spesso hanno scopi diversi, i for si usano quando si deve fare un numero determinato di cicli, i while, in genere, quando la condizione di terminazione è logica... In certi casi i for sono inutilizzabili, come quando si hanno due condizioni di terminazione!

Alex'87
27-01-2011, 16:07
Originariamente inviato da Laikius91
scanf("%[^\n]",v);

In particolare, la scanf così scritta cosa indica? Acquisisce qualsiasi carattere ad eccezione del "a capo".

premoli
27-01-2011, 16:24
Originariamente inviato da Laikius91
In certi casi i for sono inutilizzabili, come quando si hanno due condizioni di terminazione!

beh non è propriamente vero ad esempio puoi fare così

for(i=0, j=0; i<N && j<M; i++, j++)

ed è perfettamente equivalente a:

i=j=0;
while(i<N && j<M){
.
.
.
i++;
j++;
}

Alex'87
27-01-2011, 16:39
Originariamente inviato da premoli
beh non è propriamente vero ad esempio puoi fare così

for(i=0, j=0; i<N && j<M; i++, j++)

ed è perfettamente equivalente a:

i=j=0;
while(i<N && j<M){
.
.
.
i++;
j++;
} Il for usato in quel modo è proprio brutta programmazione.
Il for andrebbe usato quando sai quante volte iterare. Il while/do-while invece nei casi in cui il numero di interazioni non è determinato.

Laikius91
27-01-2011, 16:47
Originariamente inviato da premoli
beh non è propriamente vero ad esempio puoi fare così

for(i=0, j=0; i<N && j<M; i++, j++)

ed è perfettamente equivalente a:

i=j=0;
while(i<N && j<M){
.
.
.
i++;
j++;
}


Si scusami ho usato "inutilizzabili" ma era giusto dire "scomodi" :)

premoli
27-01-2011, 16:53
era solo una piccola precisazione niente di che.
;)

Loading