Строки

  • Автор темы venti
  • Дата начала
V

venti

#1
программа заключается в том,что нужно удалить повторяющиеся слова,текст вводится в Memo,я его толком не знаю,поэтому и не могу написать. Есть код на с#, но я немного переделал на с++,а в чем ошибки не знаю
C++:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
string q = Memo1->Lines;
string[] str = q->Split(' ',',','.');
for (int i = 0; i < str->Length;i++)
for (int j = 0; j < str->Length; j++)
{
if ((str[i] == str[j])&&(j!=i))
str[j] = "";
}
string ss = String->Join(" ", str);
Memo2->Clear();
Memo2->Append(ss);
}
 
V

venti

#2
вот еще немного отредактировал,но до ума довести никак не могу
C++:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
string lst = Memo1->Lines;
string[] slovo = split(lst,slovo,", :;'-");
for (int i = 0; i < slovo->Length;i++)
for (int j = 0; j < slovo->Length; j++)
{
if ((slovo[i] == slovo[j])&&(j!=i))
slovo[j] = "";
}
string nov = string->Join(" ", slovo);
Memo2->Clear();
Memo2->Append(nov);
}
 
R

rrrFer

#3
я бы сделал так...
завел бы я список строк... типа
Код:
std::list< std ::string > lstStr;
Текст который вводится в Memo я бы запихал в поток, как то так:
Код:
std ::stringstream sstr;
sstr << text;
потом бы считывал из текста слово и искал бы его в списке, если не найдено - помещаю в конец списка
Код:
while( 0 == sstr .eof() ) {
sstr >> str;
if( strLst .end() == std ::find( strLst .begin(), strLst .end(), str ) )
strLst .push_back( str );
}
и останется только вывести список
Код:
std ::for_each( strLst .begin(), strLst .end(), [](string s) { std ::cout << s; } );
не проверял, МБ опечатался где-то
 
E

Eleno4ka

#4
вариант хороший, даже отличный но есть одно НО, учитывая общую сложность программы смею предположить что потоки и большинство std функций не были изучены спрашивающим. У нас лично в такой ситуации сразу "били по голове" если кто-то приносил замудренный код, никак не на текущую стадию обучения