You don't need/want to use atoi() on a single character. You'd simply take the value of the char variable:
char word = "total";
for (i = 0; i < sizeof word - 1; i++)
printf("%c %d\n", word[i], word[i]);
As for your "hash table", you are not really implementing a hash table, you just need an array to store all possible character values, so something like:
You can then iterate through the string like my for loop above, increasing count[value] each time. Then you can iterate through the string again, finding the first character where count[value] is still 1.
int count[CHAR_MAX + 1]; /* but see footnote */
Most systems you encouter will likely have a CHAR_MAX of 127 and a CHAR_MIN of -128, which denotes that a char on that system can be between -128 and 127. These values don't matter, but the point is that CHAR_MIN can (and often will) be negative.
Therefore you have to be careful you do not end up trying to access count[negative_number]. One simple approach is to check that it's >= 0 before assignging it to your count array and ignore characters that fall outside.
A more thorough approach would be to declare your array instead as:
And then use an offset when you assign to make sure your result is always in range:
int count[CHAR_MAX - CHAR_MIN + 1];
instead of just:
count[value - CHAR_MIN]++;
Of course, another solution is just to explicitly use an unsigned char instead.