Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Как разделить строку(аналог функции explode) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Блок-Схема http://www.cyberforum.ru/cpp-beginners/thread1070558.html
Помогите пожалуйста составить блок-схему! Не как сам не могу разобраться( #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <time.h> #include <locale.h> #include <math.h> ...
C++ Цифры после запятой Доброго времени. Есть код, в котором переменная res в итоге равняется, к примеру 27,5 (float). Мне нужно вывести в файл результат с 3-мя знаками после запятой: 27,500. В итоге выводит 27,5, даже с... http://www.cyberforum.ru/cpp-beginners/thread1070510.html
C++ Закрыть форму и остановить выполнение вечных циклов
Если закрываю приложение во время исполнения цикла while (true) или иного цикла, условие выхода из которого не зависит от моего приложения, программа продолает висеть в процессах. Вопрос, как...
Самоучитель C++
Здравствуйте, Уважаемые Форумчане! Мне нужна Ваша помощь. Как вы наверно уже догадались, мне нужен самоучитель. Критерий самоучителя: 1)Учебник должен быть для начинающих программистов. 2) Учебник...
C++ По заданным целым координатам точек на плоскости определить фигуру http://www.cyberforum.ru/cpp-beginners/thread1070386.html
По заданным целым координатам точек на плоскости определить фигуру, соединив точки в порядке ввода мы можем получить: четырехугольник с самопересечением выпуклый четырехугольник трапеция...
C++ Найти сумму четных цифр трехзначного числа Здравствуйте! Помогите, как написать чтоб найти сумму четных цифр трехзначного числа? подробнее

Показать сообщение отдельно
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
16.01.2014, 00:01  [ТС]
Bend3r,

С функцией проблема
она не работает если разделитель не писать текстом "1234", а передавать через переменную
C++
1
2
3
4
5
6
7
8
9
10
11
12
string razdelitel="1234";
char razdelitel_ch[5];
strcpy(buff,str.c_str());  //присвоение string в char
strcpy(razdelitel_ch,razdelitel.c_str());  //присвоение string в char
 
    int q = -1;
    char * p = strtok(buff,razdelitel_ch);    //разбитие на лексемы
    while (p!=0){                    //проверка
        ++q;
        result_mass[q] = p;        //присвоение в массив новой лексемы до '|'
        p = strtok(NULL,razdelitel_ch);       //переход к следующей
    }
И еще даже если писать разделитель тестом, то функция работает с ошибкой, она разделяет строку даже когда встретит какой то один символ из тех что входят в разделитель, а нужно делить только когда встречаются все символы которые входят в разделитель.

Подскажи плз что не так и как исправить ?

Написал свою функцию все работает,
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
string explode(string text, string razdelitel, string result_mass[200]){
    string result;
    int i=0, n=0, j=0;
 
    //_cprintf(" text= %s", text.c_str());_cprintf("\n");
 
 
    for (i=0; i<sizeof(result_mass); i++){result_mass[i]="";}
    char text_ch[65535];
    char razdelitel_ch[15];
 
    strcpy(text_ch, text.c_str()); 
    strcpy(razdelitel_ch, razdelitel.c_str());
    ev_time_start =clock();
    for (i=0; i<sizeof(text_ch); i++){
        if(text_ch[i]==0){break;}
        if(text_ch[i]==razdelitel_ch[0]&&text_ch[i+1]==razdelitel_ch[1]&&text_ch[i+2]==razdelitel_ch[2]&&text_ch[i+3]==razdelitel_ch[3]){
 
 
            for (j=i+4; j<sizeof(text_ch); j++){
 
                if(text_ch[j]==razdelitel_ch[0]&&text_ch[j+1]==razdelitel_ch[1]&&text_ch[j+2]==razdelitel_ch[2]&&text_ch[j+3]==razdelitel_ch[3]){n++;break;}
 
 
                result_mass[n]=result_mass[n]+text_ch[j];
                i=j;
            }}}
    ev_time_end =clock();
    ev_time = (double)(ev_time_end-ev_time_start)/1000;
    _cprintf("sikl:%f ", ev_time);_cprintf("sec");_cprintf("\n");
 
    return result;
}
но медленно около 2 сек на 1 функцию и хотелось бы отладить твой быстрый способ.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru