Я определения длины определенных строк символов в C++ с функцией lenght()
, но заметил что-то странное: скажем, я определяю в функции main
Как игнорировать акценты в строке, чтобы она не изменяла ее длину?
string str;
str = "canción";
Тогда, когда я вычислить длину из str
по str.lenght()
I получить как выход 8
. Если вместо этого я определяю str = "cancion"
и вычисляю длину str
, выход будет 7
. Другими словами, акцент на букве «o» изменяет реальную длину строки. То же самое происходит с другими акцентами. Например, если str = "für"
скажет мне, что его длина равна 4
вместо 3
.
Я хотел бы знать, как игнорировать эти акцентированные символы при определении длины строки; однако я бы не хотел игнорировать отдельные символы, такие как '
. Например, если str = livin'
, длина str
должна быть 6
.
Если вы используете окна, используйте 'wstring'. Я говорю только для окон из-за [этого] (http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring) –
Вы не получаете дополнительный символ, потому что строка содержит 'o'' или что-то вроде этого, а потому что символ юникода '- состоит из двух байтов. –
Добро пожаловать в печальное слово кодирования текста в исходных литералах, кодирование текста в целом, кодирование переменной длины в частности и, возможно, нормализацию юникода, если вы чувствуете себя достаточно сильным. Прежде всего, вы должны указать кодировку, которую вы используете для текста в своем приложении, для ваших исходных файлов и того, как настроен ваш компилятор в этом отношении. Кроме того, поскольку на стандарте C++ не хватает разговоров об кодировании, зная, какой компилятор вы используете на какой платформе может быть полезен. –