Qualcosa del genere?
codice:
#include <iostream>
#include <string>
#include <fstream>
#include <locale>
using namespace std;

int main()
{
    locale loc("");
    string fileName;
    unsigned int wordCount=0, charCount=0;
    bool lastAlNum=false;
    cout<<"Nome file: ";
    getline(cin, fileName);
    ifstream is;
    is.open(fileName.c_str());
    if(!is)
    {
        cerr<<"Impossibile aprire il file."<<endl;
        return 1;
    }
    while(is)
    {
        if(!use_facet< ctype<char> >(loc).is(ctype<char>::alpha | ctype<char>::digit,is.get()))
        {
            if(lastAlNum)
                wordCount++;
            lastAlNum=false;
        }
        else
            lastAlNum=true;
	charCount++;
    }
    is.close();
    cout<<charCount<<" caratteri"<<endl;
    cout<<wordCount<<" parole"<<endl;
    return 0;
}
Potrebbe dare qualche problema con le lettere accentate se l'implementazione di locale non è fatta come Dio comanda.