36 / 36 / 0
Регистрация: 24.05.2009
Сообщений: 178

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

28.01.2012, 12:00. Показов 1344. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru