E' un bel casino, senza entrare troppo in sottigliezze:
#include <iostream>
using namespace std;
int numero_lettere(char p[], int size) // contalettere
{
int i;
for ( i = 0; ((p[i] != '\0') && (i<size)); i++);
return i;
}
int main()
{
char parola[50];
cout << "inserire parola" << endl;
cin >> parola;
cout << "il numero di lettere della parola e': ";
cout << numero_lettere(parola, 50) << endl;
}
1) facendo
cin >> parola[50]; stai dicendo che vuoi prendere dall'utente un singolo carattere. Inoltre un array di 50 elementi ha come ultimo indice 49, quindi parola[50] non esiste e stai "selezionando" un carattere oltre il limite.
2) La funzione che conta i caratteri è completamente sbagliata:
a) se dichiari una variabile nel corpo del for tale variabile sarà visibile solo all'interno del for.
b) l'istruzione di return è all'interno del for quindi al primo ciclo torna direttamente al main e torna sempre il valore 1 (i+1)
c) la lunghezza dell testo non deve considerare il terminatore di stringa
d) il carattere terminatore della stinga è '\0'
e) anche qui devi tenere conto della lunghezza dell'array che viene passato, altrimenti rischi di "selezionare" degli indici oltre i limiti dell'array
Vedi il codice corretto e fammi sapere, rispetto a quegli errori che ti ho segnalato, se capisci le correzioni.