Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 20.10.2015
Сообщений: 30
1

Удаление одинаковых символов

30.10.2017, 16:42. Показов 872. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Прошу помочь. Выдается ошибка "Range check Error!"
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
void __fastcall TForm10::Button1Click(TObject *Sender)
{
int p;
bool in = false;
AnsiString stroka = Edit2->Text;
 
    for(int j = 0; j < stroka.Length() ;j++ )
    {
        if(!isspace(stroka[j]))
        {
            for(int i = j+1; i < stroka.Length();i++ )
            {
                if(!isspace(stroka[i]))
                {
                    if(stroka[j] == stroka[i])
                    {
                        p = j;
                        in = true;
                        stroka[i] = 0x20;    
                     }
                }
            }
            if(in){ in = false; stroka[p] = 0x20;}
        }
    }
        Edit1->Text = stroka;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2017, 16:42
Ответы с готовыми решениями:

Удаление всех одинаковых символов в словах
здравствуйте! у меня такая проблема-сам код работает правильно! но только он удаляет В ДАННЫХ...

Удаление одинаковых строк
Доброе время суток, подскажите, правильно ли я делаю удаление одинаковых строк? сам код рабочий,...

Удаление одинаковых строк Листбокс
Делаю игру алхимия и там добавляются одинаковые строки в лисбокс, а как сделать чтоб они одинаковые...

Удаление одинаковых строк в StringGrid1
Как в StringGrid удалить абсолютно одинаковые строчки? Пробовал переделать найденный код для делфи...

4
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209
30.10.2017, 17:14 2
А ничего, что вы с классом работаете как с обычным массивом?
Точнее, что вы работете с ним, как с массивом классов. )

http://cubook.supernew.org/man... ansistring

Вам нужен метод c_str для получения доступа к самой строке

Добавлено через 6 минут
P.S.: Лучше писать
C++
1
=  ' ';
- сразу видно, что пробел, а не хз
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
30.10.2017, 19:09 3
Цитата Сообщение от Pink_Pank Посмотреть сообщение
Вам нужен метод c_str для получения доступа к самой строке
Чего?

Всё, что нужно - это вспомнить, что строки индексируются с 1-цы, а не с 0. И заменить 3 символа в коде:
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
void __fastcall TForm10::Button1Click(TObject *Sender)
{
    int p;
    bool in = false;
    AnsiString stroka = Edit2->Text;
 
    for (int j = 1; j <= stroka.Length(); j++)
    {
        if (!isspace(stroka[j]))
        {
            for (int i = j + 1; i <= stroka.Length(); i++)
            {
                if (!isspace(stroka[i]))
                {
                    if (stroka[j] == stroka[i])
                    {
                        p = j;
                        in = true;
                        stroka[i] = 0x20;
                    }
                }
            }
            if (in)
            {
                in = false;
                stroka[p] = 0x20;
            }
        }
    }
    Edit1->Text = stroka;
}
0
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209
30.10.2017, 19:45 4
Цитата Сообщение от volvo Посмотреть сообщение
что строки индексируются с 1-цы, а не с 0
Вот вы Builder-ы нифига не программисты! ))) индексируются с 1-цы.. )))
0
0 / 0 / 0
Регистрация: 20.10.2015
Сообщений: 30
06.11.2017, 21:57  [ТС] 5
Всем спасибо. Сделал так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm10::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
{
bool a = false;
String str1 = Edit1->Text;
wchar_t * str = str1.w_str();         //перевод string в char
int size_str=Edit1->Text.Length();
    for (int i=0; i<size_str; i++)
    {
        if (str[i]==Key)
        {
         a = true;
        }
    }
    if(a == true){
ShowMessage("Ошибка, символы повторяются");
    Edit1->Clear();
    }
    else{
}
}
0
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru