Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/57: Рейтинг темы: голосов - 57, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 134

Аналог функции split в C#

05.07.2011, 11:44. Показов 12084. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно разбить строчку на массив по знаку. Например
a|b|cd

[0] = a
[1] = b
[2] = cd
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.07.2011, 11:44
Ответы с готовыми решениями:

аналог функции chr
в делфи есть функция chr. вот код из делфи: letra := Chr(Value); нужно то же самое но в C++ Добавлено через 55 секунд ...

аналог функции pointer(...)
Доброго времени суток! вопрос немного не по теме, можете ли вы подсказать аналог функции pointer(...) для C++ Builder'a?

Аналог функции preg_match_all из php в C++
Подскажите плз функция при которой можно задать регулярку и он выведет результат то что нашел и если можно небольшой пример чик спасибо)

11
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
05.07.2011, 12:35
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот держи.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// вот функция разбивает по-указанным разделителям
void split(TStringList* lout, char* str, const char* separator) {
      for(char* tok = strtok(str, separator); tok; tok = strtok(NULL, separator))
          lout->Add(tok);
}
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
       TStringList*  lst = new TStringList();  
 
       split(lst, "a|b|cd", "|");   // разбить, возвращает список разбитых значений 
 
       lst->Clear();
 
       // пример разбить на слова
       split(lst, "ADODB; RDO-DAO-ADO-ADO.NET", ",\n\t\r :;'-");
 
       for(int i = 0; i < lst->Count; i++) // вывести их
             ShowMessage(lst->Strings[i] );
 
 
       lst->Clear();
       delete lst;      // в конце удалить
       lst = NULL;
}
3
130 / 15 / 6
Регистрация: 05.08.2013
Сообщений: 285
08.05.2015, 19:38
Спасибо Вам за полезную функцию.
А скажите пожалуйста, она меняет входную строку, так?
C++
1
2
3
4
 String filename = "C:\\heuristic\\manhattan";
 TStringList *lst = new TStringList();
 split(lst,filename.c_str(),"\\");
 ShowMessage(filename);//C:
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.05.2015, 23:17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <memory>
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     std::auto_ptr<TStringList> SL(new TStringList);
     SL->Delimiter= '|';
     SL->DelimitedText= "a|b|cd";
 
     // SL->Strings[0] = "a" ,SL->Strings[1] = "b" ...
 
     Memo1->Lines->Assign(SL.get());
}
//---------------------------------------------------------------------------
Или через boost:
http://avazart.zz.mu/2014/02/splitstrings/
3
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.05.2015, 00:11
C++
1
2
3
4
5
6
7
#include <StrUtils.hpp>
void __fastcall TForm2::Button1Click(TObject *Sender)
{
 TStringDynArray arr(SplitString(L"a|b|cd", L"|"));
    for (int i = 0; i < arr.Length; i++)
        ShowMessage(arr[i]);
}
5
130 / 15 / 6
Регистрация: 05.08.2013
Сообщений: 285
09.05.2015, 00:23
Спасибо за еще несколько интересных функций)
Ну а все-таки, почему функция split меняет входную строку?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.05.2015, 22:45
Цитата Сообщение от fier Посмотреть сообщение
почему функция split меняет входную строку?
Потому что функция strtok() модифицирует строку. Вот - http://www.cplusplus.com/reference/cstring/strtok/
1
130 / 15 / 6
Регистрация: 05.08.2013
Сообщений: 285
12.05.2015, 23:28
Я пробовал передавать не саму строку, а ее копию:
C++
1
2
3
4
5
String sample = "txt|csv|xml";
String sample_buff = sample;
split(sample_buff ,"|");
OutputDebugString(sample_buff);//txt
OutputDebugString(sample);//txt
Дело в том, что sample_buff - указатель на sample?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
14.05.2015, 16:40
sample_buff - это не указатель, а объект класса AnsiString или UnicodeString, в зависимости от версии и настроек билдера.

Твоя реализация функции split(), судя по всему, отличается от того, что обозначено в теме. Показывай...
1
130 / 15 / 6
Регистрация: 05.08.2013
Сообщений: 285
14.05.2015, 23:40
Я использую такую-же функцию, как и в примере выше, за исключением того, что я
добавил return. Для полной ясности, покажу, как ее использую у себя в программе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// функция разбивает по-указанным разделителям, maked by xAtom from CyberForum
void split(TStringList* lout, char* str, const char* separator) {
      for(char* tok = strtok(str, separator); tok; tok = strtok(NULL, separator)) {
          lout->Add(tok);
      }
      return;
}
 
//Сформировать путь для отчета, создать нужные директории(если их еще не сущуствует)
String GetPathwayToReport (String filename, String type, String format) {
    TStringList*  lst = new TStringList();
        split(lst, filename.c_str(), "\\");
        String ProgrDir = GetProgrammDirectory()+"\\reports";
        if (!DirectoryExists(ProgrDir)) {
            CreateDir(ProgrDir);
    }
        //имя файла, по которому составляется отчет
        String XmlName = lst->Strings[lst->Count-1];
        //отдельная папка для отчета
        String PatwayToReport = ProgrDir+"\\"+XmlName;
        if (!DirectoryExists(PatwayToReport)) {
            CreateDir(PatwayToReport);
        }
        free(lst);
        return PatwayToReport + "\\" + XmlName + "_" + type + "." + format;
 
}
 
//здесь я вызываю функции, приведенные выше
void __fastcall TForm1::MenuGetComplexClick(TObject *Sender)
{
/........................................../
 
        String SelectedXML;
        String SelectedXML_rep;
        for (int i=0;i<FilesList->Items->Count;i++) {
                if (FilesList->Selected[i]) {
                        SelectedXML = FilesList->Items->Strings[i];
                        SelectedXML_rep = FilesList->Items->Strings[i];
                }
        }
String filename = GetPathwayToReport(SelectedXML, "stability", "html");
//если подаю входным параметром SelectedXML, то получаю не совсем то, что ожидаю, т.к. SelectedXML - изменилась
filename = GetPathwayToReport(SelectedXML_rep, "chart_stability", "bmp");
}
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
15.05.2015, 00:39
Что-то я утерял нить дискуссии. В чем вопрос-то? Вопрос просто о причине модификации переменной filename, или как?
Или нужно сделать так, чтобы она не модифицировалась?
0
130 / 15 / 6
Регистрация: 05.08.2013
Сообщений: 285
15.05.2015, 01:41
И то и то
Почему модифицируется, как избежать модификации?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2015, 01:41
Помогаю со студенческими работами здесь

Аналог функции Delphi в C++ Builder
Здравствуйте. Нужно заменить вот такую строку Delphi FormCreate(Self); на аналогичную в С++ Builder. Заранее спасибо.

Какой аналог функции strlcpy в C++ bulder'e
Подскажите какой аналог функции strlcpy в C++ bulder'e? И как вывести на status bar строку из массива char?

Есть ли в С аналог функции explode(или split)?
Есть ли в С аналог или сама функция explode или split, которая позволяет разбить строку на подстроки, беря за разделитель указанный символ...

аналог Split
Кто-нибудь знает аналоги Split, который применяется в C#?Желательно для класса string Я пишу на c++ без использования платформы .NET. ...

[Mono] Аналог Split в Mono?
Есть ли какой-нибудь аналог split в mono? Нигде не могу его найти.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru