Здравствуйте! На Тимусе есть такая задача: http://acm.timus.ru/problem.aspx?space=1&num=1158.
Так вот, к ней прилагается 23-ий тест, который моя правильная (я уверен!) программа не может пройти из-за проблем с символами с кодами больше 127 (как я понял из форума, это первый тест где они появляются).
Это очень обидно, так как я долго решал эту непростую задачу, а тут такая подстава. Объясните пожалуйста, почему с этими символами возникают проблемы (я догадываюсь, что из-за того что первые 128 совпадают во всех кодировках, а дальше нет) и что надо сделать на C++, чтобы их решить.
char в C++ знаковый, юзай unsigned char и будет тебе счастье.
unsigned char buf[123123];
scanf("%s", buf);
скорее всего у тебя проблемы с отрицательными символами (символы с кодами больше 127 становятся отрицательными). string s = "ы"; s[0] < 0; т.е. нельзя писать array[s[0]] = blabla;
можно например так делать array[(unsigned char)s[0]] = blabla;
Прочти книжку по C++. Станет понятнее.
unsigned char buf[1000];
gets((char*)buf);
Плохо читал. сейчас когда ты немного можешь программировать чтение книжки поможет понять получше этот язык. Я прочитав несколько книг, и работая не первый год на работе на C++, не перестаю удивляться ему и все равно узнаю о нем что нибудь новое каждый год.
В общем, я решил что писать свои gets и strlen - больший изврат, чем добавить при считывании вот это: