Консультация № 85762
06.05.2007, 20:40
0.00 руб.
0 2 2
Здраствуйте уважаемые эксперты! Хочу вас спросить вот по какому поводу:
Имеется AnsiString строка, в которой содержатся слова, разделенные ;
мне нужно выделить эти слова и добавить их в ListBox...
у меня возникает проблема с определнием длины слова, а точнее, сколько знаков до ;
прошу помощи
с уважением Dima

Обсуждение

Неизвестный
06.05.2007, 21:10
общий
это ответ
Здравствуйте, Le_san!
В приложении код. Правда писал я его в Visual Studio 2005, поэтому код врядли откомпилируется, если вы пользуетесь другой средой разработки.
Суть в том что строку можно разбить с помощью метода String.Split();

Код в приложении

Приложение:
String^ stringToSplit;//получаем строку из поля с текстомstringToSplit = textBox->Text;//собственно в этой строке и происходит деление строки на несколько, разделитель - ‘;‘array<System::String ^> ^ stringsToAdd = stringToSplit->Split(‘;‘);//в цикле заполняем листбоксfor(int i=0; i<stringsToAdd->Length; i++){ listBox->Items->Add(stringsToAdd[i]);}
Неизвестный
07.05.2007, 12:39
общий
это ответ
Здравствуйте, Le_san!
В приложении код. Дам некоторые пояснения. В AnsiString/ShortString/WideString индексация символов начинается с 1, что не свойственно C/C++, зато свойственно Pascal, потому как данные классы, да и вообще вся библиотека VCL написаны на Object Pascal. Подразумевается, что знаки ‘;‘ разделяют текст не на слова, а на строки в общем случае, которые могут содержать и не одно слово. Причем последняя строка в тексте не имеет в конце себя разделитедя ‘;‘. Если он есть в конце текста, то последней строкой считается та, что находится за ним и является пустой строкой. Если переменная ShowEmptyStrings==true, то пустые строки тоже будут выводиться в ListBox. Если переменная TrimSpace==true, то удаляются пробелы перед и после каждой выводимой строки.
Удачи!

Приложение:
// для примера случай, содержащий "опасные" местаAnsiString Text = "; ; some string;another string ;; ; string again; ;the last one";bool ShowEmptyStrings = false; // выводить в ListBox пустые строки?bool TrimSpace = true; // удалять пробелы перед и после каждой строки?int p=1;int Len = Text.Length()+1;for(int i=1; i<=Len; ++i){ if(i==Len || Text[i]==‘;‘) { AnsiString Sub = Text.SubString(p,i-p); p = i+1; if(TrimSpace) Sub=Sub.Trim(); if(Sub.Length()==0 && !ShowEmptyStrings) continue; ListBox1->Items->Append(Sub); }}
Форма ответа