Это звучит как простая проблема, но C++ усложняет ее (по крайней мере, для меня): у меня есть wstring, и я хотел бы получить первую букву как объект wchar_t, а затем удалить эту первую букву из строки.
Это здесь не работает для символов, отличных от ASCII:
wchar_t currentLetter = word.at(0);
Потому что он возвращает два символа (в цикле) для таких символов, как немецкие умляуты.
Здесь тоже не работает:
wchar_t currentLetter = word.substr(0,1);
error: no viable conversion from 'std::basic_string<wchar_t>' to 'wchar_t'
И это тоже:
wchar_t currentLetter = word.substr(0,1).c_str();
error: cannot initialize a variable of type 'wchar_t' with an rvalue of type 'const wchar_t *'
Любые другие идеи?
Ваше здоровье,
Мартин
---- Обновление ----- Вот исполняемый код, который должен продемонстрировать проблему. Эта программа будет перебирать все буквы и выводить их одну за другой:
#include <iostream>
using namespace std;
int main() {
wstring word = L"für";
wcout << word << endl;
wcout << word.at(1) << " " << word[1] << " " << word.substr(1,1) << endl;
wchar_t currentLetter;
bool isLastLetter;
do {
isLastLetter = ( word.length() == 1 );
currentLetter = word.at(0);
wcout << L"Letter: " << currentLetter << endl;
word = word.substr(1, word.length()); // remove first letter
} while (word.length() > 0);
return EXIT_SUCCESS;
}
Однако фактический результат, который я получаю:
ф?р ? ? ? Буква: f Буква: ? Буква: р
Исходный файл закодирован в UTF8, и кодировка консоли также установлена на UTF8.
wstring::substr()
возвращает новыйwstring
, а не один символ. - person Jonathan Potter   schedule 27.11.2013