Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
36 / 36 / 0
Регистрация: 24.05.2009
Сообщений: 178

Непонятные дела с русскими буквами(опять) при сравнении строк

28.01.2012, 12:00. Показов 1340. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема такая: при сравнении некоторых строк (например, "поцелуй"-"поцелуй") методом String::Compare, получается значение 1. Я что только не пробовал, все равно 1. Вобщем привожу код траев:
C++
1
2
3
4
5
6
7
8
9
10
11
12
CultureInfo^ ci=gcnew CultureInfo("ru-RU");
String^ temp1=ansText->Text;   //значение с формы
String^ temp2=form1->gWordArr->GetPtr()[curIndex]->GetRussian(); //значение с формы, метод возвращает String^, temp1 и temp2 нормально инициализируются, правильными значениями "поцелуй" и "поцелуй"
String^ temp3="поцелуй";
String^ temp4="поцелуй";
int temp5=String::Compare("поцелуй","поцелуй"); //ОК - 0
int temp6=String::Compare(temp3,temp4);          //ОК - 0
int temp7=String::Compare(temp1,temp2);// НЕ ОК - 1
int temp8=String::Compare(temp1,temp2,true,ci);// НЕ ОК - 1
int temp9=String::Compare(temp1,temp2,StringComparison::InvariantCulture);//НЕ ОК - 1
int temp10=String::Compare(temp1,temp2,StringComparison::Ordinal);//НЕ ОК - хз че ваще (1к+)
int temp11=String::Compare(temp1,temp2,StringComparison::CurrentCulture);//НЕ ОК - 1
Но так не со всеми словами. Например для сравнения "король"-"король", все нормально уже тут:
C++
1
int temp7=String::Compare(temp1,temp2);// ОК - 0
без всяких извращений. Вобщем, если знает кто, подскажите, пожалуйста, как нормально поцелуй сравнить, чтобы 0 получился.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.01.2012, 12:00
Ответы с готовыми решениями:

Регистронезависимое сравнение строк с русскими буквами
Необходимо регистронезависимо сравнивать строки string с русскими буквами. Пробовал поиграться с встроенным toUpper но у меня вот так он не...

Проблемма с русскими буквами при Redirect'e
Есть jsp-страница page_1.jsp, которая выдаёт html, в котором есть ссылка. Нажимая на эту ссылку выполняется скрипт: ...

Проблема с русскими буквами при отправке формы.
Проблема, с которой мне раньше никогда не приходилось сталкиваться. Вобщем если человек вводит в форму латинские буква, то всё ок. Если не...

4
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
28.01.2012, 17:24
C++
1
String^ temp1=ansText->Text; //значение с формы String^ temp2=form1->gWordArr->GetPtr()[curIndex]->GetRussian(); //значение с формы, метод возвращает String^, temp1 и temp2 нормально инициализируются, правильными значениями "поцелуй" и "поцелуй"
Это Ваши объекты и мне трудно сказать что такое ansText или gWordArr.
String^ нормально поддерживает оператор = если левый и правый операнд String^ причем так как это всегда бывает с адресными выражениями. Конструктор насколько мне известно не вызывается.
Т.е. мой совет - создайте строки используя конструктор, посмотрите что в них и попробуйте сравнить. Может поможет
0
36 / 36 / 0
Регистрация: 24.05.2009
Сообщений: 178
28.01.2012, 21:30  [ТС]
Неважно ведь что это за объекты, главное что возвращает используемый метод. А он, как я писал, возвращает String^, которым строки нормально инициализируются (все равно на всякий случай попробовал через конструктор, как и ожидал - ничего не изменилось). Проблема именно в сравнении. Если инициализировать строки значением с одного элемента, то все нормально - 0. Но если одинаковыми значениями с разных элементов ("поцелуй" у обоих, по крайней мере, в дебаггере все выглядит абсолютно одинакого, возможно они как то отличаются по внутренней структуре и из-за этого так странно сравниваются), то начинаются какие-то необъяснимые глюки.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
28.01.2012, 21:55
Не могу сказать точно в Вашем случае, почему я уже сказал,
но бывает, что важно. Возвращать можно, что угодно, но если используются неявные преобразования например то результат может быть разный. Например строка полученная из файла зависит от кодировки... и.т.п.
Советую, но не настойчиво - Проанализируйте свои источники, приведите к одному типу например массивам Char[], гляньте что в них, используйте конструкторы сток, сравните.
1
36 / 36 / 0
Регистрация: 24.05.2009
Сообщений: 178
28.01.2012, 22:26  [ТС]
Все, проблема вроде решена. Перевел строки в std::string и оказалось что у 2ой строки в индексе 0 стоит непонятный символ '' с кодом 9 (0хС9 в ascii, насколько я смог понять по кодам других символов), который отображался только если развернуть строку. Не знаю откуда он там взялся (тем более берется он еще и не у всех слов - у "поцелуй" - есть, у "король" - нет), но если выкинуть 0 индекс из сравнения для 2 строки, то все норм.

Добавлено через 31 минуту
Жесть как я протупил У меня в файле, откуда слова берутся просто таб стоял, и из за него все беды(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.01.2012, 22:26
Помогаю со студенческими работами здесь

Проблема при использовании сокетов с русскими буквами.
ДЕЛО В ТОМ ЧТО ПРИ ПЕРДАЧИ ДАННЫХ МЕЖДУ КЛИЕНТОМ И СЕРВЕРОМ ИСПОЛЬЗУЮТСЯ ТАКИЕ ЗАМОРОЧКИ КАК ПОТОКИ ВВОДА/ВЫВОДА ДАННЫХ ... КАК ЖЕ...

Возникает ошибка при работе с русскими буквами
Помогите разобраться что не правильно в программе. Программа принимает строку, потом перебирает ее и сохраняет только согласные буквы но...

проблема с русскими буквами при использовании метода navigate()
Файл jsp строит html-документ, в котором имеется форма, на которой есть текстовое поле и селект. На onChange() селекта повешан обработчик в...

Не пишет русскими буквами в VS при написании приложений под Windows
Проблема заключается в следующем В VS при написании приложений под Windows в одном единственном месте не пишет по русски. Когда...

При вводе имени и фамилии русскими буквами количество символов увеличивается в 2 раза
При вводе имени и фамилии английскими буквами все работает нормально. Но при вводе имени и фамилии русскими буквами количество символов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru