Моя проблема заключается в том, что ни один метод, используемый для работы с строкой, не работает на wstring. Поэтому я спрашиваю, как я могу легко очистить wstring
для эстетической цели.
Мой код прямо сейчас:
while (!foundRightOne)
{
wstring cTitle;
ForegroundWindow = GetForegroundWindow();
cout << "FRGW " << ForegroundWindow << endl;
int len = GetWindowTextLengthW(ForegroundWindow) + 1;
wchar_t * windowTitle = new wchar_t[len];
GetWindowTextW(ForegroundWindow, windowTitle, len);
title += windowTitle;
// OUTPUT
cTitle = L"Title: ";
cTitle += title;
wcout << cTitle << endl;
cTitle = ' ';
//OUTPUT
keyPress = getchar();
system("CLS");
if (keyPress == 'y' || keyPress == 'Y')
{
foundRightOne = true;
}
}
В основном это циклы, пока я cTitle
y
или Y
, я cTitle
когда вижу правильный cTitle
и после ~ 20 циклов cTitle получает полностью заполненный текст из последних циклов.
std::wstring::clear
должен работать, поскольку и он, и std::string
являются std::basic_string
s. Проверьте документацию std :: basic_string, если у вас возникли проблемы.
#include <iostream>
int main()
{
std::string regularString("regular string!");
std::wstring wideString(L"wide string!");
std::cout << regularString << std::endl << "size: " << regularString.size() << std::endl;
std::wcout << wideString << std::endl << "size: " << wideString.size() << std::endl;
regularString.clear();
wideString.clear();
std::cout << regularString << std::endl << "size: " << regularString.size() << std::endl;
std::wcout << wideString << std::endl << "size: " << wideString.size() << std::endl;
}
Вывод:
regular string!
size: 15
wide string!
size: 12
size: 0
size: 0
Вот идеонная ссылка на этот код.
cTitle = ""
или повторно инициализировать его с помощью cTitle = std::wstring()
std::string
иstd::wstring
абсолютно одинаковы, за исключением того типа символов, который они хранят. В любом случае, пробел не является очищенной строкой, а символьный литерал не является широким символом, очень похоже на то, как строковый литерал не является широкой строкой.