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); }}