Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73

Строка: проверить две строки методом string.Compare

17.06.2017, 14:35. Показов 1987. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу разобраться со сравнением строк. Хочу проверить две строки методом string.Compare. Если я правильно понял, в параметрах я указываю строки для сравнения и bool - ignoreCase ( учитывать регистр или нет ).
Так вот эта проверка ведёт себя совершенно непонятно. При любом значении параметра ignoreCase ( false или true) результат всегда -1
Почему?!!!!
C#
1
2
3
4
5
6
            string s1 = "a";
            string s2 = "A";
             //Сравнение с использованием статического метода
             Console.WriteLine(string.Compare(s1, s2, false));
            //Сравнение с использованием не статического метода
            Console.WriteLine(s1.CompareTo(s2));
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2017, 14:35
Ответы с готовыми решениями:

Даны две строки: S1 и S2. Проверить, содержится ли строка S2 в строке S1
Даны две строки: S1 и S2. Проверить, содержится ли строка S2 в строке S1. Если да, то вывести номер позиции, начиная с которой S2...

Даны две строки s1 и s2 проверить является ли строка s1 префиксом s2
Очень надеюсь на помощь

Даны две строки: S1 и S2. Проверить, содержится ли строка S2 в строке S1. Если да, то вывести номер позиции, н
Даны две строки: S1 и S2. Проверить, содержится ли строка S2 в строке S1. Если да, то вывести номер позиции, начиная с которой S2...

12
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
17.06.2017, 15:05
Зачем тебе понадобился вообще этот метод? Делай просто s1 == s2. Это же не java в которой все через жопу...

String.Compare
0
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
17.06.2017, 15:09  [ТС]
Дело в том, что этот метод выдаёт не два варианта ответа, а три: -1 (строка меньше); 0 (строки одинаковые); 1 (строка больше) и при этом ещё можно включить ignoreCase
0
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
17.06.2017, 15:31
А я обычно IndexOf использую. Там понятнее. Если -1, то не возвращает, если 0, то есть совпадение. Можно еще в параметрах длинну указать и рег стандарты.
Тоже с Compare начинал - были непонятки, плюнул
0
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
17.06.2017, 16:11  [ТС]
Дорогие форумчане, я прошу только ответить на мой вопрос. Мне не нужны альтернативные технологии, меня интересует данная
0
 Аватар для Cupko
657 / 594 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
17.06.2017, 16:18
manumozz,
Миниатюры
Строка: проверить две строки методом string.Compare  
0
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
17.06.2017, 16:39  [ТС]
Да, с двумя буквами А и а он так и ведёт себя, а теперь поменяйте, к примеру на а и В.
0
 Аватар для Cupko
657 / 594 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
17.06.2017, 16:40
manumozz, а что вы ожидаете?

String.Compare:
Сравнивает два указанных объекта String (с учетом или без учета регистра) и возвращает целое число, которое показывает их относительное положение в порядке сортировки.
0
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
17.06.2017, 16:42  [ТС]
В случае сравнения строковой а и заглавной В он выдаёт минус один с любым состоянием переключателя ignoreCase
0
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,593
Записей в блоге: 2
17.06.2017, 16:45
Цитата Сообщение от manumozz Посмотреть сообщение
Не могу разобраться со сравнением строк. Хочу проверить две строки методом string.Compare.
Если вы хотели разобраться, то нужно прочитать сначала MSDN. И там написано:
CompareTo Метод предназначен главным образом для использования при сортировке или операции сортировки в алфавитном порядке. Он не должен использоваться, если основная цель вызова метода — определить, равны ли две строки. Чтобы определить, равны ли две строки, вызовите Equals метод.
Получается что вы хотите упорно использовать альтернативные технологии, а нужно обычные.

Источник:
- String.Compare
- String.CompareTo

Цитата Сообщение от manumozz Посмотреть сообщение
При любом значении параметра ignoreCase ( false или true) результат всегда -1
Это вообще странно. И у Cupko и у меня, результат одинаковый - "0" и "-1".
0
 Аватар для Cupko
657 / 594 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
17.06.2017, 16:51
Цитата Сообщение от manumozz Посмотреть сообщение
В случае сравнения строковой а и заглавной В он выдаёт минус один с любым состоянием переключателя ignoreCase
Потому что, "a" и "A" находятся ранее "B" в порядке сортировки, учитывая ваши региональные параметры.
Почитайте MSDN, как выше вам порекомендовали, там всё есть.
0
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
17.06.2017, 16:54  [ТС]
Почему а и А находятся ранее В? Код у А - 65, код у В - 66, код у а - 97. Значит а строковая находится после В заглавной
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
17.06.2017, 18:07
Цитата Сообщение от manumozz Посмотреть сообщение
Почему а и А находятся ранее В? Код у А - 65, код у В - 66, код у а - 97. Значит а строковая находится после В заглавной
Потому что по умолчанию сравнение идет в лексиграфическом порядке, то есть в порядке алфавита. Код символа при этом роли не играет. Если тебе нужно сравнение с учетом кода символа, то следует использовать Ordinal порядок сравнения.
C#
1
Console.WriteLine(string.Compare(s1, s2, StringComparison.Ordinal));
Чтобы лучше понять разницу между лексиграфическим порядком и порядком по коду, посмотри что дает данный код:
C#
1
2
3
string abc = string.Concat(Enumerable.Range(0, 26).Select(n => (char)('a'+n)+""+(char)('A'+n)));
string lexicographicOrder = string.Concat(abc.Select(ch => ch.ToString()).OrderBy(s => s, StringComparer.CurrentCulture));
string ordinalOrder = string.Concat(abc.Select(ch => ch.ToString()).OrderBy(s => s, StringComparer.Ordinal));
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.06.2017, 18:07
Помогаю со студенческими работами здесь

Std::string compare
#include <cstring> #include <iostream> int main() { std::string a = "aa"; std::string b = "ab"; std::cout <<...

Метод compare string
Всем привет! Не могу понять в чем у меня ошибка! Применяю метод compare из string, но компилятор выдает ошибку, что мало параметров в...

Неправильно работает string.compare()
Доброго всем времени суток. Столкнулся с проблемой - не могу решить. Есть отсортированный файл: Файл большой, поэтому...

Строка: две переменные типа string сравнить и вывести на экран кол-во ошибок
есть две переменные типа string нужно их сравнить и вывести на экран кол-во ошибок, то есть s1:='Тысяча'; s2:='fgghrty'; ...

Сравнение строк с помощью String.Compare
Доброго времени суток. Нужна помощь с String.Compare. В общем, ввожу строку. Разбиваю сплитом на слова. Суть задачи найти одинаковые...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru