Problem22

#include <iostream>
#include <fstream>
#include <set>
#include <string>
using namespace std;

void
split(char *token, const char *delimit, set<string> *pv)
{
    char *tk;

    tk = strtok(token, delimit);

    while (tk != NULL) {
        pv->insert(tk);
        tk = strtok(NULL, delimit);
    }
}

void
split(string *token, const char *delimit, set<string> *pv)
{
    //  string を char に直す
    char *c = new char[token->size()];
    strcpy(c, token->c_str());

    split(c, delimit, pv);
}

int
score(string *s)
{
    int n = 0;

    for (string::iterator it = s->begin(), end = s->end(); it != end; it++)
    {
        n += *it - 'A' + 1;
    }

    return n;
}

int
main(int argc, char **argv)
{
    ifstream fin("names.txt");
    set<string> set_names;
    int ans = 0;
    string s;

    fin >> s;
    split(&s, "\",", &set_names);
    
    int i = 1;
    for(set<string>::iterator it = set_names.begin(), end = set_names.end(); it != end; it++)
    {
        string t = *it;
        ans += score(&t) * i++;
    }

    cout << ans << endl;

    return 0;
}