Я не могу использовать str [0], потому что у меня может быть строка с многобайтовыми символами
Я не знаю ни одной реализации CRT, которая поддерживает классификацию и преобразование не-ASCII символов,Если вы хотите поддерживать Unicode, тогда все гораздо сложнее, поскольку «преобразование первого символа в верхний регистр» может быть бессмысленным в других языках.Для этого вам нужно использовать библиотеку Unicode , написанную экспертами.
Чтобы проиллюстрировать, насколько это сложно, рассмотрим следующий случай в English .Преобразование трех последовательности кодовых точек 'file' (с лигатурой) должно разбить первую кодовую точку на две отдельные буквы, в результате чего получается "File".Обратите внимание, что стандартные интерфейсы C / C ++ для классификации случаев и преобразования не учитывают такие случаи, поэтому даже невозможно реализовать их для правильной поддержки Юникода.