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

Замена русских символов пробелами - C++

Восстановить пароль Регистрация
 
Maxachev
0 / 0 / 0
Регистрация: 23.01.2014
Сообщений: 11
24.01.2014, 05:39     Замена русских символов пробелами #1
Необходимо написать программу по замене русских символов на пробелы(_)
Моя программа запускается, но почему-то вместо пробелов какие-то непроизносимые символы,
помогите исправить
Буду очень признателен за помощь.

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <locale.h>
 
using namespace std;
 
 
int length(char* str)
{
    int i = 0;
    while (str[i++] != NULL);
    return --i;
}
 
char* replaceWords(char* str)
{
    char* resultStr = new char[length(str) + 1];
    int i = 0;
    while (str[i])
    {
        if ((str[i] >= 'а' && str[i] <= 'я') || (str[i] >= 'А' && str[i] <= 'Я'))
            resultStr[i] = '_';
        else
            resultStr[i] = str[i];
        i++;
    }
    resultStr[i] = NULL;
    return resultStr;
}
 
void devideString(char* str, char* &first, char* &second)
{
    int i = 0, j = 0, k = 0;
    while (str[i])
    {
        if ((str[i] >= 'а' && str[i] <= 'я') || (str[i] >= 'А' && str[i] <= 'Я'))
        {
            first[j++] = str[i++];
        }
        else if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
        {
            second[k++] = str[i++];
        }
        else
            i++;
    }
    first[j] = NULL; second[k] = NULL;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
    char* str = new char[255];
    cout << "Введите текст : " << endl;
    cin >> str;
    char* myStr;
    char* first = new char[255];
    
    cout << "First string: " << str << "\n";
    
    myStr = replaceWords(str);
    cout << "\nReplace first: " << myStr << "\n";
    
 
    system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
24.01.2014, 07:48     Замена русских символов пробелами #2
а так? (только для прописных)
C++
1
        if ( ( ( c >= -96) && ( c <= -17) ) || ( ( c >= 'А') && ( c <= 'Я') ))
Maxachev
0 / 0 / 0
Регистрация: 23.01.2014
Сообщений: 11
24.01.2014, 08:17  [ТС]     Замена русских символов пробелами #3
Цитата Сообщение от AntonChik Посмотреть сообщение
а так? (только для прописных)
C++
1
        if ( ( ( c >= -96) && ( c <= -17) ) || ( ( c >= 'А') && ( c <= 'Я') ))
Да, так лучше, спасибо!
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
24.01.2014, 08:32     Замена русских символов пробелами #4
Цитата Сообщение от Maxachev Посмотреть сообщение
char* replaceWords(char* str)
сделай unsigned char
все дело в том что у русских букв установлен старший бит что при знаковом представлении является признаком отрицательности соответственно все сравнения не работают
а при беззнаковом сработают

Добавлено через 2 минуты
а если нужно отсечь все кроме латинского алфавита
то
можно так
C++
1
2
if (str[i]&0x80)
 resultStr[i] = '_';
Добавлено через 3 минуты
Цитата Сообщение от Maxachev Посмотреть сообщение
if ((str[i] >= 'а' && str[i] <= 'я') || (str[i] >= 'А' && str[i] <= 'Я'))
самое смешное что эта конструкция может сработать
все дело в настройках компилятора
чем считать char по умолчанию signed char или unsigned char
Yandex
Объявления
24.01.2014, 08:32     Замена русских символов пробелами
Ответ Создать тему
Опции темы

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