#include <iostream>
#include <string>
#include <clocale>
#include <cwctype>
int main()
{
std::setlocale(LC_CTYPE, "en_US.utf8");
std::wstring str{ L"asd Ф" };
short arr[1000]{};
int cnt{};
for (auto c : str)
{
if (iswalpha(c))
{
++arr[c];
}
}
for (int i = 0; i < sizeof(arr) / sizeof(*arr); ++i)
{
if (arr[i] != 0)
{
++cnt;
std::wcout << wchar_t(i) << "-" << arr[i] << " ";
}
}
}

Ваш код выводит статистику встречаемости латинских букв в тексте. Для этого использовать широкие символы нет никакой необходимости. Следующий код делает то же самое.
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main() {
string str{ "asd Ф" };
const auto n = 128;
int arr[n]{};
for (auto c : str) {
if (c > 0 && isalpha(c)) {
++arr[c];
}
}
for (auto i = 0U; i < n; ++i) {
if (arr[i] != 0) {
cout << char(i) << '-' << arr[i] << ' ';
}
}
puts("");
system("pause > nul");
}
int main()
{
std::setlocale(LC_CTYPE, "en_US.utf8"); //указываем используемую программой кодировку
std::wstring str { L"asd Ф" } ; //присваиваем str строку типа wstring (L говорит о расширенной кодировке)
short arr[1000] { } ;//статический массив на 1000 нулевых элементов типа short int
int cnt { } ; //cnt = 0;
for (auto c : str) //пробегает по строке str поочередно присваивая с ее элементы.
{ //auto c - переменная с автоматически определится как wchar по типу строки
if (iswalpha(c)) //isalpha(c) - проверяет, хранит ли c букву
{
++arr[c]; // если да то увеличивает элемент массива arr[код символа] на еденицу
}
}
for (int i = 0; i < sizeof(arr) / sizeof(*arr); ++i) //где sizeof(arr)/sizeof(*arr) = размер массива в байтах разделить на размер одного его элемента чтобы получить размер массива в элементах (можно просто написать 1000)
{
if (arr[i] != 0) //если в массиве встречается ненулевой элемент
{
++cnt; //увеличить переменную cnt на еденицу
std::wcout << wchar_t(i) << "-" << arr[i] << " "; //выводит символ с кодом равным i и сколько раз он встречался в строке (число arr[i])
}
}
}