Удаление повторяющихся символов в Memo

SadikHad

Ребята помогите Я с помощью Memo создал строковый массив который выводится в Memo2 и генерируется по алфавиту Нужно сделать так чтоб после генерации не было повторяющихся символов Например: у меня выводится aaabbbccc а нужно чтобы было abc
5 ответов

SadikHad

#include <string>
#include <algorithm>
 
// ...
 
    std::wstring s(Memo1->Text.c_str()); // или std::string, если Билдер древний
    s.erase(std::unique(s.begin(), s.end()), s.end());
    Memo1->Text = s.c_str();
например, чтобы велосипеды не писать...


SadikHad

У меня есть код, он он преобразует строку "aaaabbbbcccc", в "abbbbcccc", нужно сделать что бы каждый символ повторялся только 1 раз.
{ 
for (int i = 0; i < Memo2->Lines->Count; i++) 
{ 
int size = Memo2->Lines->Strings[i].Length(); 
char *text = new char[size + 1]; 
strcpy(text,Memo2->Lines->Strings[i].c_str()); 
std::qsort(text, size, sizeof(char), cmp_values); 
char *text1=new char[size+1]; 
for(int j=0;j<size;j++) 
{ 
int z=0; 
for(int k=0;;k++) 
{ 
if(text[k]==text[k+1])z++; 
else break; 
} 
text1[j]=text[j+z]; 
} 
Memo2->Lines->Delete(i); 
Memo2->Lines->Insert(i,text1); 
delete []text; 
} 
}


SadikHad

SadikHad, Самый примитивный и легкий алгоритм. и всего в три строчки!
for (int d= 1; d < Memo2->Text.Length(); d++)
      {
       if(Memo2->Text.SubString(d,1)== Memo2->Text.SubString(d+1,1))
       {
Memo2->Text = StringReplace(Memo2->Text, Memo2->Text.SubString(d,1)+Memo2->Text.SubString(d,1), Memo2->Text.SubString(d,1),TReplaceFlags());
    d--;
            }
      }


SadikHad

Самый примитивный
Самый примитивный - вот такой:
    for (int i = Memo2->Text.Length(); i > 1; i--)
    {
        if(Memo2->Text[i] == Memo2->Text[i - 1])
        {
            Memo2->Text = Memo2->Text.Delete(i, 1);
        }
    }


SadikHad

volvo,