Форум программистов, компьютерный форум CyberForum.ru

Поиск кириллицы в строке. - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
notgosu
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 20:07     Поиск кириллицы в строке. #1
Добрый вечер, ув. товарищи-программисты). Столкнулся с проблемкой поиска и замены букв кириллицы в строке, введенной пользователем. Стоит задача - заменить все символы кириллицы на пробелы. Казалось бы делаем так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void kiril(char text[], char *ptext)
{
    int n=strlen(text);
    strupr(text);
    char spis[31]={'А','Б','В','Г','Д','Е','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ы','Ь','Э','Ю','Я'};
    //ПОИСК ЭЛЕМЕНТОВ КИРИЛЛИЦЫ В ТЕКСТЕ И ИХ ЗАМЕНА НА ПРОБЕЛ
    for (int i=0; i<n;i++){
        for (int j=0; j<31; j++){
            if (*(ptext+i) == spis[j])
                *(ptext+i)=' ';
        }
    }
    //ВЫВОД НА ЭКРАН ОТФИЛЬТРОВАННОГО ТЕКСТА
    cout<<"Текст после фильтрации:\n"<<ptext<<"\n";
    
}
и должно работать, но нет - половина символов остаеться на месте в виде иероглифов.
В связи с чем прошу помочь советом - есть ли решение данной проблемы? Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2011, 20:07     Поиск кириллицы в строке.
Посмотрите здесь:

C++ Поиск подстроки в строке
поиск символов в строке C++
Поиск фразы в строке C++
C++ Поиск символов в строке
C++ Поиск подстроки в строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.02.2011, 20:10     Поиск кириллицы в строке. #2
notgosu, мне кажется, или в русском языке больше букв?
notgosu
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 20:20  [ТС]     Поиск кириллицы в строке. #3
Цитата Сообщение от alex_x_x Посмотреть сообщение
notgosu, мне кажется, или в русском языке больше букв?
Не указал "ё" и "ъ" специально из-за ненадобности)
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.02.2011, 21:09     Поиск кириллицы в строке. #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstdio>
#include <clocale>
 
int main(){
  unsigned char str[] = "Hello! иногда и к нам жизнь поворачивается лицом,"
                        " поэтому все немного проще, it's all";
  setlocale( LC_CTYPE, "rus" );
  for( unsigned char* s = str; *s; ++s ){
    if( *s >= 'a' && *s <= 'я' || *s >= 'А' && *s <= 'Я' ){
      *s = ' ';
    }
  }
  printf( "%s", str );
}
notgosu
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 21:45  [ТС]     Поиск кириллицы в строке. #5
Твоя программа ничего не менят в исходной строке.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.02.2011, 21:55     Поиск кириллицы в строке. #6
notgosu, с чего такой вывод?
dxdy
 Аватар для dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
17.02.2011, 22:04     Поиск кириллицы в строке. #7
alex_x_x, неверное условие проверки.
notgosu
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 22:04  [ТС]     Поиск кириллицы в строке. #8
Цитата Сообщение от alex_x_x Посмотреть сообщение
notgosu, с чего такой вывод?
После компиляции выводит начальную строку без изменений. Пробовал часть твоей проги:
C++
1
2
 if( *s >= 'a' && *s <= 'я' || *s >= 'А' && *s <= 'Я' ){
      *s = ' ';
в свою ф-цию вставить, результат тот же, что и при моей проверке - часть символов остаеться в виде иероглифов, часть таки заменяется пробелом.
dxdy
 Аватар для dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
17.02.2011, 22:12     Поиск кириллицы в строке. #9
хотя по этому примеру можно посмотреть какую кодировку ASCII имеют буквы
C++
1
2
3
4
5
6
7
8
9
10
#include <cstdio>
#include <clocale>
 
int main(){
    printf("%d ", 'а'); 
    printf("%d ", 'я');
//латинская буква
    printf("%d ", 'a');
   return 0;
}
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.02.2011, 22:30     Поиск кириллицы в строке. #10
Bash
1
2
[alexxx@localhost ~]$ ./a.out 
Hello!                                          ,                          , it's all[alexxx@localhost ~]$
чито не такто?
notgosu
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 22:33  [ТС]     Поиск кириллицы в строке. #11
Цитата Сообщение от dxdy Посмотреть сообщение
хотя по этому примеру можно посмотреть какую кодировку ASCII имеют буквы
C++
1
2
3
4
5
6
7
8
9
10
#include <cstdio>
#include <clocale>
 
int main(){
    printf("%d ", 'а'); 
    printf("%d ", 'я');
//латинская буква
    printf("%d ", 'a');
   return 0;
}
Думал об этом, но для всего русского алфавита найти коды ASCII немного муторно, но как запасной вариант сойдет.
Все же хотелось бы простенькую проверку на наличие кириллицы, но я так понимаю её не существует(
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.02.2011, 22:34     Поиск кириллицы в строке. #12
вижу константы могу представляться как отрицательные
notgosu
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 22:38  [ТС]     Поиск кириллицы в строке. #13
Цитата Сообщение от alex_x_x Посмотреть сообщение
Bash
1
2
[alexxx@localhost ~]$ ./a.out 
Hello!                                          ,                          , it's all[alexxx@localhost ~]$
чито не такто?
Поиск кириллицы в строке.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.02.2011, 22:39     Поиск кириллицы в строке. #14
а если unsigned в обоих случаях убрать?
notgosu
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 22:40  [ТС]     Поиск кириллицы в строке. #15
Цитата Сообщение от alex_x_x Посмотреть сообщение
а если unsigned в обоих случаях убрать?
Тоже самое.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.02.2011, 22:54     Поиск кириллицы в строке. #16
*s >= 'я' && *s <= 'а' || *s >= 'Я' && *s <= 'А'
notgosu
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 22:59  [ТС]     Поиск кириллицы в строке. #17
Цитата Сообщение от alex_x_x Посмотреть сообщение
*s >= 'я' && *s <= 'а' || *s >= 'Я' && *s <= 'А'
Без изменений. Проблема в компиляторе может быть? Пользуюсь VS2008.
dxdy
 Аватар для dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
17.02.2011, 23:05     Поиск кириллицы в строке. #18
попробовал сохранить .cpp через notepad++ как ANSCII и скомпилировать через Visual Studio 2008 Command Prompt. Без успеха.

Добавлено через 1 минуту
может попробовать так
C++
1
2
3
   if( (*s >= 'a' && *s <= 'я') || (*s >= 'А' && *s <= 'Я') ){
      *s = ' ';
    }
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.02.2011, 23:15     Поиск кириллицы в строке. #19
давайте разберемся
русский язык лежит в отрицательном диапазоне, а именно
-32 ......... -1
а_________я
-64 ......... -33
А_________Я
тогда для русских букв должно подходить
c >= 'а' && c<='я' || c>= 'А' && c <= 'Я'

Добавлено через 1 минуту
dxdy, на -Wall мне сказали по поводу скобок, но тож не понятно, приоритет у && выше ||
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2011, 23:22     Поиск кириллицы в строке.
Еще ссылки по теме:

поиск в строке C++
C++ Определить, какая буква кириллицы встречается в строке наибольшее количество раз
Поиск слова в строке C++

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

Или воспользуйтесь поиском по форуму:
notgosu
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 23:22  [ТС]     Поиск кириллицы в строке. #20
dxdy, скобки не помогли. А у тебя прога alex_x_x-а выдает верный результат?
Yandex
Объявления
17.02.2011, 23:22     Поиск кириллицы в строке.
Ответ Создать тему
Опции темы

Текущее время: 14:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru