Ciao a tutti,
dovrei realizzare un programma che legga una stringa di caratteri (che contenga anche spazi) e che ritorni a video l'elenco delle parole immesse (visto che in generale la stringa puo' contenere spazi e quindi essere composta da piu' parole) con accanto il numero di caratteri che le compongono.
Ho risolto in questo modo:
codice:
#include<stdio.h>
#define MAX 50
void leggi();
void conta();
void stampa();
char nome[MAX];
char vettore[MAX][MAX];
int cont[MAX];
int h,k;
void main()
{leggi();
conta();
stampa();
system("PAUSE");}
void leggi()
{int i,j;
printf("Inserire nome(massimo 50 caratteri)");
fgets(nome,50,stdin);
i=0;
j=0;
k=0;
h=0;
while(nome[i]!='\0')
{if(nome[i]!=' ')
{vettore[j][k]=nome[i];
k++;}
else
{vettore[j][k]='\0';
j++;h++;k=0;}
i++;}
vettore[j][k]='\0';
vettore[j][k-1]='\0';}
void conta()
{int i,j;
for(i=0;i<=h;i++)
{cont[i]=0;
j=0;
while(vettore[i][j]!='\0')
{cont[i]++;j++;}
}}
void stampa()
{int i,j;
for(i=0;i<=h;i++)
{for(j=0;j<cont[i];j++)
{printf("%c",vettore[i][j]);}
printf(" numero di caratteri:%d\n",cont[i]);
}}
Tuttavia non mi spiego perchè devo inserire:
codice:
vettore[j][k-1]='\0';
il problema è nella funzione leggi: se non inserisco l'assegnazione soprastante infatti per l'ultima parola (ovvero in corrispondenza dell'ultima riga della matrice) k viene incrementato una volta in piu' del dovuto, e a quanto ho capito nella cella di troppo della matrice viene messo un bel \n.....
come mai??? cioè secondo me in vettore[j][k-1] dovrebbe esserci l'ultima lettera della parola in questione... e invece c'è il \n, che mi crea problemi, e così devo inserirgli io il terminatore.
grazie.