Поиск:

Ответ в темуСоздание новой темы Создание опроса
> необзодимо из строки выдернуть переменные 
:(
    Опции темы
zhz
Дата 31.10.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 31.10.2006
Где: Petropavlovsk-Kam chatsky

Репутация: 2
Всего: 2



Просьба не ругаться, если вопрос "децкий" или уже задовался на форуме, просто нет времени учить подробности. Собственно проблема: есть строка
вида #firststring#secondstring#thirdstring хранящаяся в переменной s(AnsiString), необходимо чтобы все три строки были помещены в три разные переменные, т.е. например переменной s1 присвоить firststring, s2 - secondstring и наконец s3 - thirdstring. firststring и secondstring обычные слова без пробелов, а вот thirdstring может быть как словом, так и предложением, заевршающей решетки(после thirdstring) нет, вместо нее(решетки) может быть любой другой разделитель, если это необходимо. заранее благодарен.
PM MAIL ICQ   Вверх
deniska
Дата 31.10.2006, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 1.7.2005
Где: Троицк

Репутация: нет
Всего: 0



ну так и считывай первые 2 через while(string[i]!='#') а третий вместо символа решетки поставь свой символ разделителя
PM MAIL ICQ   Вверх
Garoh
Дата 31.10.2006, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 29.8.2006
Где: Москва

Репутация: нет
Всего: нет



а)Если известны координаты начал этих 3 строк и их длины:
Код

s1 = s.SubString(position1, length1); // position1 - начало строки 1, length1 - длина строки 1
s2 = s.SubString(position2, length2); // position2 - начало строки 2, length2 - длина строки 2
s3 = s.SubString(position3, length3); // position3 - начало строки 3, length3 - длина строки 3

б)Если подстроки разделены символами пробельной группы:
Код

char string[3][N]; //массив с подстроками типа char, N - длина каждой строки
sscanf(s.c_str(), "%s %s %s", string[0], string[1], string[2]);

Если нужно будет переконвертить в тип AnsiString, то пиши так:
Код

s1 = (AnsiString)string[1];

в)Во всех остальных случаях:
1 способ:
как сказал deniska;
2 способ:
Код

int position, number = 0, flag = 2;
AnsiString symbol, strings[3];

for (position = 2; position <= s.Length(); position++)
{
symbol = s.SubString(position,1);
if (symbol == "#")
{
strings[number] = s.SubString(flag, position-flag+1);
number++;
flag = position + 1;
}
}

PM MAIL   Вверх
apook
Дата 31.10.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 0
Всего: 23



Нет ни чего проще!
Код

char *str =new char[50];

char *str1 =new char[10];
char *str2 =new char[10];
char *str3 =new char[20];

strcpy(str, "#123456789#123456789#123456789#123456789");

int i=0, c=0, n=0, q=0;
for(; i <strlen(str); i++)
{
if(c <3 && str[i] =='#')
{
    if(c==1)    str1[n] ='\0';    
    else if(c==2)    str2[n] ='\0';
    n=0;
    c++;
    i++;
    }

if(c==1)
{
    str1[n] =str[i];
    n++;
    }

else if(c==2)
{
    str2[n] =str[i];
    n++;
    }

else if(c==3)
{
    str3[n] =str[i];
    n++;
    }

}
str3[n] ='\0';


printf("%s\n%s\n%s\n", str1, str2, str3);
getch();


Можно легко переделать под AnsiString


Это сообщение отредактировал(а) apook - 31.10.2006, 16:58


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Данкинг
Дата 31.1.2007, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



А как то же на Студии сделать?..

Это сообщение отредактировал(а) Данкинг - 31.1.2007, 01:20


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
stmamont
Дата 1.2.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 13.3.2004
Где: влг

Репутация: 3
Всего: 3



можно использовать TRegExpr
и напистать аналог функции explode

под студию - последний вариант будет замечательно работать


--------------------
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.