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:
Tuttavia non mi spiego perchè devo inserire: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]); }}
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.....codice:vettore[j][k-1]='\0';
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.

Rispondi quotando
