Работа со строками
Подскажите пожалуйста как со строками, регулярными выражениями.
Как-то непонятно вопрос поставлен!
Подскажите пожалуйста как со строками, регулярными выражениями.
Так же, как с мужчинами... :D
Как-то непонятно вопрос поставлен!
Прошу прошения за опечаки.
Я хотела спросить -
Подскажите пожалуйста функции для работы со строкаки, регулярными выражениями
Еще раз прошу прощения
Прошу прошения за опечаки.
Я хотела спросить -
Подскажите пожалуйста функции для работы со строкаки, регулярными выражениями
Еще раз прошу прощения
Насколько я понимаю...нет таких...Это же не PHP...:-)
Поговаривают, что есть некий класс TParser. Может быть он вам поможет...
Лучше опишите саму задачу - вам и посоветуют как ее лучше решить...
Прошу прошения за опечаки.
Я хотела спросить -
Подскажите пожалуйста функции для работы со строкаки, регулярными выражениями
Еще раз прошу прощения
Для работы со строками есть функции в RTL, они начинаются с str (для char), например strlen, strcpy, strcmp и т.д.
В Win32 API также есть функции для работы со строками, например lstrlen, CompareString, и т.д.
Что касаемо регулярных выражений, для BCB есть библиотека TRegExpr. Взгляните еще на сайт http://www.pcre.org/, там представлена достаточно популярная библиотека PCRE. Кажется, она должна поставляться вместе с BCB, посмотрите файл pcre.h. Можно еще использовать библиотеку boost (boost.org).
Насколько я понимаю...нет таких...Это же не PHP...:-)
Поговаривают, что есть некий класс TParser. Может быть он вам поможет...
Лучше опишите саму задачу - вам и посоветуют как ее лучше решить...
Мне необходимо разбить строку на несколько строк
по разделителю
Как например: строку "AAAA BBBB CCCC" разбить
на три строки, результат поместить в массив строк
Мне необходимо разбить строку на несколько строк
по разделителю
Как например: строку "AAAA BBBB CCCC" разбить
на три строки, результат поместить в массив строк
Если это ВСЯ задача, то полагаю, что можно обойтись простыми Pos и SubString, вместо привлечения доп.библиотек...
TStringList* TMainForm::SplitString(AnsiString & text, AnsiString & separators)
{
TStringList* list = new TStringList();
AnsiString str;
int start = 1, stop;
int l = text.Length();
for(int i=1; i<=l; i++)
{
if(text.IsDelimiter(separators,i))
{
stop = i;
if(stop-start>=1)
{
list->Add(text.SubString(start,stop-start));
}
start = stop + 1;
}
}
if(l-start>=1 || l==start)
list->Add(text.SubString(start,l-start+1));
return list;
}
Посмотри, может подойдет. У меня этот кусок работает
TStringList* TMainForm::SplitString(AnsiString & text, AnsiString & separators)
{
TStringList* list = new TStringList();
AnsiString str;
int start = 1, stop;
int l = text.Length();
for(int i=1; i<=l; i++)
{
if(text.IsDelimiter(separators,i))
{
stop = i;
if(stop-start>=1)
{
list->Add(text.SubString(start,stop-start));
}
start = stop + 1;
}
}
if(l-start>=1 || l==start)
list->Add(text.SubString(start,l-start+1));
return list;
}
Все должно нормально работать, только я бы чуть изменил, дабы избежать расходов на копирование класса. Примерно вот так:
{
AnsiString str;
int start = 1, stop;
int l = text.Length();
for(int i=1; i<=l; i++)
{
if(text.IsDelimiter(separators,i))
{
stop = i;
if(stop-start>=1)
{
list->Add(text.SubString(start,stop-start));
}
start = stop + 1;
}
}
if(l-start>=1 || l==start)
list->Add(text.SubString(start,l-start+1));
}
Все должно нормально работать, только я бы чуть изменил, дабы избежать расходов на копирование класса. Примерно вот так:
Согласен.
Если прогу нельзя улучшить, то что это за прога:)
Согласен.
Если прогу нельзя улучшить, то что это за прога:)
Ага, в любой программе из 2-х или более операторов есть как минимум одна ошибка=)
Подскажите пожалуйста как со строками, регулярными выражениями.
Есть компонент - RegExpr. Полная копия Perl`овских, только реализовано все в функциях. Загляни на http://anso.da.ru/.
Мне необходимо разбить строку на несколько строк
по разделителю
Как например: строку "AAAA BBBB CCCC" разбить
на три строки, результат поместить в массив строк
Совершенно элементарно: с помощью свойств Delimiter (тип char) и DelimitedText (тип AnsiString) у StringList'а (если надо код, могу завтра отпостить). Кстати, у Memo есть аналогичные свойства.
Мне необходимо разбить строку на несколько строк
по разделителю
Как например: строку "AAAA BBBB CCCC" разбить
на три строки, результат поместить в массив строк
Например, так:
#include <vcl.h>
#pragma hdrstop
#include "UMain.h"
//------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ AnsiString S=Edit1->Text;
ShowMessage(DelStr(' ',S));
}
//------------------------------------------------
AnsiString TForm1::DelStr(char Delimiter,AnsiString S)
{TStringList * A=new TStringList;
try{
A->Delimiter=Delimiter;
A->DelimitedText=S;
return A->Text;}
__finally {delete A;A=0;}
}
//------------------------------------------------
//Собственно, в StringList'е и будет
//массив разделённых строк
//------------------------------------------------
//------------------------------------------------
#ifndef UMainH
#define UMainH
//-----------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TEdit *Edit1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
AnsiString DelStr(char Delimiter,AnsiString S);
__fastcall TForm1(TComponent* Owner);
};
//------------------------------------------------
extern PACKAGE TForm1 *Form1;
//------------------------------------------------
#endif
pToken = strtok(str,"&");
while (pToken != NULL) {
printf("%s\n",pToken);
pToken = strtok(NULL,"&");
}
В данном случае разделитель - "&"