Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> фильтр string, фильтрация string 
:(
    Опции темы
n1k0LaY
Дата 18.6.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.6.2008

Репутация: нет
Всего: нет



Возможно ли как то быстро проверить является ли некая строка string temp, русскоязычным словом, не прибегая по символьной проверкой на принадлежание к интервалу кодов русского алфавита?
 пример такого кода(ниже)   

   private int proverka(string temp)
        {
            int k;
            for (i = 0; i < temp.Length; i++)
            {
                k=temp[i];
                if (k < 1039 || k > 1104) return -1;
            } 
            return 0;
            
        }

просто необходимо много фильтровать )) будет достаточно громоздко, да и неудобно маленько.

Это сообщение отредактировал(а) n1k0LaY - 18.6.2008, 10:18
PM MAIL ICQ   Вверх
Walker
Дата 18.6.2008, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: 5
Всего: 16



Ваш код вполне быстрый.
Позвольте, однако, сделать несколько замечаний:
1. Использовать лучше следующее условие:
Код

if ('А' <= k && k <= 'Я' || 'а' <= k && k <= 'я')

При всей Вашей любви к C внесите изменения, соответствующие специфике C#:
2. Тип значения, возвращаемого методом, лучше сделать bool и возвращать в зависимости от результата false или true, а назвать метод лучше как-нибудь вроде IsCyrillic().
3. вместо цикла for использовать foreach.
Код

foreach (char k in temp.ToCharArray())




--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
mihryak
Дата 18.6.2008, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



только проверкой символов
да и с ними не всё так просто
например, является ли русскоязычным слово "n-мерное (пространство)"?

Добавлено @ 10:51
Цитата(Walker @  18.6.2008,  11:41 Найти цитируемый пост)
3. вместо цикла for использовать foreach.

при действительно большом кол-ве проверок for таки предпочтительнее, не будет создаваться и использоваться класс энумератора
и ToCharArray() необязателен, sting и так реализует IEnumerable
а так - да, "оставь С всяк сюда входящий"  smile 

Это сообщение отредактировал(а) mihryak - 18.6.2008, 10:52
PM MAIL ICQ   Вверх
Bishop
Дата 18.6.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 3.6.2005
Где: Минск, Беларусь

Репутация: 6
Всего: 16



Раз уж на то пошло, то идеологически правильней (и в полном соответствии с поставленной задачей) будет так:
Код
System.Text.RegularExpressions.Regex.IsMatch("АБВГДЕЁабвгдеёжзя", @"\b\p{IsCyrillic}+\b")

PM WWW ICQ   Вверх
n1k0LaY
Дата 18.6.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.6.2008

Репутация: нет
Всего: нет



Не ожидал такой скорости =)) Всем спасибо кто откликнулся, буду мотать на ус)) 

Все таки сделаю... булевский тип и такую проверку)
Код

if ('А' <= k && k <= 'Я' || 'а' <= k && k <= 'я')



Это сообщение отредактировал(а) n1k0LaY - 18.6.2008, 11:35
PM MAIL ICQ   Вверх
Bishop
Дата 18.6.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 3.6.2005
Где: Минск, Беларусь

Репутация: 6
Всего: 16



n1k0LaY, в таком случае не забудьте про букву «ё» («Ё»), которая не входит в общий диапазон. 
А регулярные выражения советую изучить.

PM WWW ICQ   Вверх
n1k0LaY
Дата 18.6.2008, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.6.2008

Репутация: нет
Всего: нет



Цитата

А регулярные выражения советую изучить.

да блин меня эти слова убивают еще пока )))    недавно  C# учу , притом сразу практикой)  до этого  кодил олимп задачки и всякую всячину на pascale , так что использую стандартные методы.
А букву Ё учел) спасибо)
PM MAIL ICQ   Вверх
Idsa
Дата 18.6.2008, 21:00 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(n1k0LaY @  19.6.2008,  00:27 Найти цитируемый пост)
А регулярные выражения советую изучить.

Гадость редкостная эти ваши регулярные выражения smile


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Rififi
Дата 18.6.2008, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



Гадость редкостная эти ваши регулярные выражения smile
"ты просто не умеешь их готовить" © (:
PM MAIL   Вверх
Idsa
Дата 18.6.2008, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(Rififi @  19.6.2008,  03:49 Найти цитируемый пост)
"ты просто не умеешь их готовить" © (: 

smile На шеф-повара не претендую, но на заслуженного поваренка - точно.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Zakonnic
Дата 19.6.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 25.4.2006

Репутация: 2
Всего: 6



Если нужна скорость, то можно сделать отдельный проект Utils с unsafe-методами. Только не забыть в свойствах проекта их разрешить. Ну и тогда переделать изначальное предложение автора (действительно, довольно быстрое), можно так:
Код

public static class Utils
{
    unsafe public static bool IsCyrillic(string str)
    {
        int len = str.Length;
        fixed (char* pString = str)
        {
            char* pChar = pString;
            for (int i = 0; i < len; i++, pChar++)
                if ((*pChar < 'А' || *pChar > 'я') && *pChar != 'ё' && *pChar != 'Ё') 
                    return false;
        }

        return true;
    }
}


Но ансейф есть ансейф... 
По идеологии дотнета логичнее все-же использовать регулярные выражения для таких задач. Но это несколько медленнее.
Ищите компромисы smile
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.