Здравствуйте, ShootNick, Вы писали:
SN>Может кто-то написал функции toupper, tolower с поддержкой русских кодировок?
SN>Поделитесь пожалуйста. Поиск по форуму облазил, интернет — не нашел. Нужно не только для прямого преобразования в upper/lower но и для использования в регистро-независимом поиске и т.п. Поделитесь пожалуйста. А то setlocale с 866 никак не работает
Наверное что-то напутали они там со стандартами. Спасибо вам!
Вот тут сам решил немного разобраться в этом вопросе и набросал пару примеров.
#include <iostream>
#include <algorithm>
#include <string>
#include <locale>
struct uppercase
{
uppercase(const std::locale& loc) :
loc(loc)
{}
char operator()(const char &c)
{
return std::toupper(c, loc);
}
private:
std::locale loc;
};
int main()
{
std::string s("строка 866 русский алфавит");
std::locale loc("rus_rus.866");
std::transform(s.begin(), s.end(), s.begin(), uppercase(loc));
std::cout << s;
return 0;
}
или без извращений

:
#include <iostream>
#include <string>
#include <locale>
using namespace std;
void string_toupper(string &s, const locale &loc)
{
for (string::iterator i=s.begin(), j=s.end(); i!=j; ++i)
*i = toupper(*i, loc);
}
int main()
{
string s("строка 866 русский алфавит");
string_toupper(s, locale("rus_rus.866"));
std::cout << s <<'\n';
return 0;
}
Насчет регистро-независимого поиска тоже есть кое-что. Как оформлю в примерчик, положу.
... << RSDN@Home 1.0 beta 5 >>