Показать сообщение отдельно
Старый 07.06.2012, 09:42   #13
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Вопрос-Ответ

На счёт "лучше всего" - вопрос не ко мне. Но я вот как делаю на примере с++ билдера:

//функция
TStringList* SplitString(const String s, const char *razd) {
	TStringList *list = new TStringList();
	if(razd == NULL) {//если разделители не указаны, то возвращаем исходную строку
		list->Add(s);
		return list;
	}
	int len = s.Length();
	String tmp = "";
	bool bRazd;
	//пробегаем побуквенно по строке
	for(int k=1;k<=len;++k) {
		bRazd = false;
		for(int j=0;razd[j] != NULL;++j) {//проверка не является ли текущий символ разделителем
			if(s[k] == razd[j]) {
				bRazd = true;
				break;
            }
		}
		if(bRazd == true && tmp != "") { //если разделитель, то предыдущее набранное из букв слово добавляем в список
			list->Add(tmp);
			tmp = "";
		}
		else { //иначе набираем слово побуквенно
			tmp += s[k];
		}
		if(k == len && tmp != "") //если достигли последнего символа, то последнее слово тоже в список добавляем
        	list->Add(tmp);
	}
	return list;
}

//использоваие
String s = "man{1,2,3,4}";
char razd[] = {'{','}',',',' '};
TStringList *lst = fnSplitString(s, razd);
for(int k=0;k<lst->Count;++k) {
	ShowMessage(lst->Strings[k]);
}
delete lst; //необязательно, должно удалиться при выходе из области видимости
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Spy4433 (07.06.2012)