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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
notgosu
9 / 9 / 1
Регистрация: 16.02.2011
Сообщений: 17
#1

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

17.02.2011, 20:07. Просмотров 2648. Ответов 23
Метки нет (Все метки)

Добрый вечер, ув. товарищи-программисты). Столкнулся с проблемкой поиска и замены букв кириллицы в строке, введенной пользователем. Стоит задача - заменить все символы кириллицы на пробелы. Казалось бы делаем так:
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++
Здравствуйте, ищу в строке определенное слово (с помощью find), с этим разобрался, а вот теперь нужно считать слово или символ, в общем что...

Поиск слова в строке - C++
if(name.Pos(&quot;Ïðîãðàììèðîâàíèå&quot;) == 1) price *= 2; если слово Программирование в начале строки то price *= 2 подскажите а как...

Поиск подстроки в строке - C++
Здравствуйте. Очень нужна программа поиска подстроки в строке. Действительно оч нужна. точная формулировка задачи: Написать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.02.2011, 22:54     Поиск кириллицы в строке. #16
*s >= 'я' && *s <= 'а' || *s >= 'Я' && *s <= 'А'
notgosu
9 / 9 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 22:59  [ТС]     Поиск кириллицы в строке. #17
Цитата Сообщение от alex_x_x Посмотреть сообщение
*s >= 'я' && *s <= 'а' || *s >= 'Я' && *s <= 'А'
Без изменений. Проблема в компиляторе может быть? Пользуюсь VS2008.
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
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.02.2011, 23:15     Поиск кириллицы в строке. #19
давайте разберемся
русский язык лежит в отрицательном диапазоне, а именно
-32 ......... -1
а_________я
-64 ......... -33
А_________Я
тогда для русских букв должно подходить
c >= 'а' && c<='я' || c>= 'А' && c <= 'Я'

Добавлено через 1 минуту
dxdy, на -Wall мне сказали по поводу скобок, но тож не понятно, приоритет у && выше ||
notgosu
9 / 9 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 23:22  [ТС]     Поиск кириллицы в строке. #20
dxdy, скобки не помогли. А у тебя прога alex_x_x-а выдает верный результат?
dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
17.02.2011, 23:28     Поиск кириллицы в строке. #21
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstdio>
#include <clocale>
 
int main(){
  char str[] = "Hello! иногда и к нам жизнь поворачивается лицом,"
                        " поэтому все немного проще, it's all";
  setlocale( LC_CTYPE, "rus" );
  for( char* s = str; *s; ++s ){
    if( (*s <= -1 && *s >= -32) || (*s >= -64 && *s <= -33) ){
      *s = ' ';
    }
  }
  printf( "%s", str );
}
notgosu
9 / 9 / 1
Регистрация: 16.02.2011
Сообщений: 17
17.02.2011, 23:58  [ТС]     Поиск кириллицы в строке. #22
dxdy, в таком виде заработало, спасибо!
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
18.02.2011, 00:04     Поиск кириллицы в строке. #23
dxdy, не можете выяснить в чем было дело (если можете воспроизвести))?
очевидно какие-то приведения между знаковыми и беззнаковыми
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2011, 01:25     Поиск кириллицы в строке.
Еще ссылки по теме:

Поиск подстроки в строке - C++
Добрый вечер. Помогите пожалуйста с заданием, нужно срочно его сделать. Сам текст: даны 2 массива (один большой, другой маленький), нужно...

Поиск символа в строке - C++
Здравствуйте! у меня такой вопрос, надо найти символ в строке, а именно символ '&lt;' и '&gt;' между этими символами может быть что угодно... ...

Поиск символов в строке - C++
Есть строка в файле txt, как организовать поиск наиболее часто повторяющегося символа в строке ?

Поиск числа в строке - C++
Доброго времени суток! Есть задача найти число в строке и вывести его, если перед числом стоит минус, то вывести и его. Строка состоит из...

поиск слова в строке - C++
Всем привет! задача нужно найти слово в строке например: char str1=&quot;hello world&quot;; char str2=&quot;world&quot;; if(str1==str2) ...


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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
18.02.2011, 01:25     Поиск кириллицы в строке. #24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/////////////////////////////////////////////////////////////////////////////////////////
//заменить все символы кириллицы на пробелы.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <locale>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
/////////////////////////////////////////////////////////////////////////////////////////
T_str  replace_cyr_letters_to_spaces(const T_str&  s)
{
    struct  T_is_cyr_let
    {
        bool  operator() (char  let)
        {
            return    isalpha(let, std::locale(""))
                   && !isalpha(let, std::locale("C"));
        }
    };
    T_str  res_s;
    std::replace_copy_if(s.begin(), s.end(), std::back_inserter(res_s), 
                         T_is_cyr_let(), ' ');
    return  res_s;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    T_str  s("Hello! Привет, привет...");
    std::cout << "Исходный текст:"
              << std::endl
              << s
              << std::endl
              << std::endl
              << "Текст, где все буквы кириллицы заменены пробелами:"
              << std::endl
              << replace_cyr_letters_to_spaces(s)
              << std::endl;    
}
Yandex
Объявления
18.02.2011, 01:25     Поиск кириллицы в строке.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru