Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

необзодимо из строки выдернуть переменные

14K
31 октября 2006 года
zhz
16 / / 25.10.2006
Просьба не ругаться, если вопрос "децкий" или уже задовался на форуме, просто нет времени учить подробности. Собственно проблема: есть строка
вида #firststring#secondstring#thirdstring хранящаяся в переменной s(AnsiString), необходимо чтобы все три строки были помещены в три разные переменные, т.е. например переменной s1 присвоить firststring, s2 - secondstring и наконец s3 - thirdstring. firststring и secondstring обычные слова без пробелов, а вот thirdstring может быть как словом, так и предложением, заевршающей решетки(после thirdstring) нет, вместо нее(решетки) может быть любой другой разделитель, если это необходимо. заранее благодарен.
309
31 октября 2006 года
el scorpio
1.1K / / 19.09.2006
Попробуй через TStringList: свойство CommaText, предварительно поэкспериментировав со свойствами CommaChar и DelimitedChar.
3.0K
31 октября 2006 года
Мerlin
267 / / 25.07.2006
Код:
int splitString(AnsiString &src, AnsiString &dest1, AnsiString &dest2, AnsiString &dest3, char delim)
{
  int iRes = 0;
  dest1 = "";
  dest2 = "";
  dest3 = "";
  char *ch = src.c_str();
  if(*ch==delim)
  {
    ch++;
    char *cLast = strchr(ch, delim);
    if(*cLast) // Первое слово
    {
      iRes = 1;
      *cLast = '\0';
      dest1 = ch;
      *cLast = delim;
      ch = cLast + 1;
      if(*ch)
      {
        cLast = strchr(ch, delim);
        if(*cLast) // Второе слово
        {
          iRes = 2;
          *cLast = '\0';
          dest2 = ch;
          *cLast = delim;
          ch = cLast + 1;
          if(*ch) // Третье слово
          {
            iRes = 3;
            dest3 = ch;
          }
        }
      }
    }
  }
  return iRes;
}
3
31 октября 2006 года
Green
4.8K / / 20.01.2000
Можно сделать что-то типа этого:
 
Код:
const char* str = "#firststring#secondstring#thirdstring";
    stringstream ss(str);

    string tmp, s1, s2, s3;
    getline(ss, tmp, '#');
    getline(ss, s1, '#');
    getline(ss, s2, '#');
    getline(ss, s3, '#');
3.0K
31 октября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=Green]Можно сделать что-то типа этого:
 
Код:
const char* str = "#firststring#secondstring#thirdstring";
    stringstream ss(str);

    string tmp, s1, s2, s3;
    getline(ss, tmp, '#');
    getline(ss, s1, '#');
    getline(ss, s2, '#');
    getline(ss, s3, '#');
[/QUOTE]Чтоб ЭТО в Buildere работало, нужно в начало написать

#include <sstream>
using namespace std;

и что-то типа
Код:
int splitString(AnsiString &src, AnsiString &dest1, AnsiString &dest2, AnsiString &dest3, char delim)
{
   stringstream ss(src.c_str());

   string tmp;
   getline(ss, tmp, delim);
   getline(ss, tmp, delim);
   dest1 = tmp.c_str();
   getline(ss, tmp, delim);
   dest2 = tmp.c_str();
   getline(ss, tmp, delim);
   dest3 = tmp.c_str();
   int iRes = 0;
   if(dest3!="")
     iRes = 3;
   else if(dest2!="")
     iRes = 2;
   else if(dest1!="")
     iRes = 1;
     
   return iRes;
}
3
31 октября 2006 года
Green
4.8K / / 20.01.2000
Храните деньги в сберегательной кассе, а строковые переменные в std::string ! :D
2.0K
31 октября 2006 года
Dstr
158 / / 27.04.2006
Функция из Delphi world:
S - строка
Delimeter-разделитель
Parts-TStrings зарание созданая методом Create,тут будут все слова.Если надо будет узнать кол-во слов - метод couth(или как он там).

Код:
procedure StrBreakApart(const S, Delimeter: string; Parts: TStrings);
var
  CurPos: integer;
  CurStr: string;
begin
  Parts.clear;
  Parts.BeginUpdate();
  try
    CurStr := S;
    repeat
      CurPos := Pos(Delimeter, CurStr);
      if (CurPos > 0) then
      begin
        Parts.Add(Copy(CurStr, 1, Pred(CurPos)));
        CurStr := Copy(CurStr, CurPos + Length(Delimeter),
          Length(CurStr) - CurPos - Length(Delimeter) + 1);
      end
      else
        Parts.Add(CurStr);
    until CurPos = 0;
  finally
    Parts.EndUpdate();
  end;
end;
3.0K
31 октября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=Dstr]Функция из Delphi world:
S - строка
Delimeter-разделитель
Parts-TStrings зарание созданая методом Create,тут будут все слова.Если надо будет узнать кол-во слов - метод couth(или как он там).
skipped
[/QUOTE]Из-за абстрактных методов не можно создать объект TStrings, нужен TStringList. И так как строка начинается с delimiter, сперва будет добавлена лишняя пустая строка.
309
01 ноября 2006 года
el scorpio
1.1K / / 19.09.2006
Можно попробовать обойтись без TStringList, а работать через стандартный класс DynamicArray
Код:
void Splitting (AnsiString Sourse, AnsiString Find, DynamicArray<AnsiString> &Dest)
{[INDENT]
Dest.Lenght = 0; // Обнуляем массив результатов
for (int Pos ; (Pos = Sourse.Pos (Find)) > 0; )
{[INDENT]Dest.Lenght = Dest.Lenght +1; // Увеличиваем размер массива
Dest [Dest.High] = Sourse.SubString (1, Pos-1); // Копирование фрагмента строки в массив
Sourse.Delete (1, Pos); // Удаление фрагмента строки
[/INDENT]}
Dest.Lenght = Dest.Lenght +1; // Увеличиваем размер массива
Dest [Dest.High] = Sourse; // Копирование фрагмента
[/INDENT]}
14K
06 ноября 2006 года
zhz
16 / / 25.10.2006
всем большое спасибо!
386
06 ноября 2006 года
newcss
297 / / 05.04.2005
Если вообще фпадлу думать...
Юзайте FLEX =)
Типа как регулярные выражения в ПХП или ПЕРЛЕ =).
Он полностью весь документ может распарсить по константам =)
----
Другой способ - конечные автоматы =) пишешь и тож юзаешь =)
тут вообще 3-и строчки кода будет.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог