Форум программистов, компьютерный форум 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> void razmer(); void zapis();
C++ Цифры после запятой Доброго времени. Есть код, в котором переменная res в итоге равняется, к примеру 27,5 (float). Мне нужно вывести в файл результат с 3-мя знаками после запятой: 27,500. В итоге выводит 27,5, даже с параметром setprecision. Вопрос: что я делаю не так? f2.open("output.txt",ios::out); f2 << setprecision(3) << res; Так же, было бы интересно узнать, как получить универсальное решение, т.е. если... http://www.cyberforum.ru/cpp-beginners/thread1070510.html
C++ Закрыть форму и остановить выполнение вечных циклов
Если закрываю приложение во время исполнения цикла while (true) или иного цикла, условие выхода из которого не зависит от моего приложения, программа продолает висеть в процессах. Вопрос, как прекратить работу приложения вместе с выполняемыми им процессами? По сути дела, можно ввести логическую переменную, типа AppIsActive, при закрытии формы присваивать ей ложное значение. Соответственно при...
Самоучитель C++
Здравствуйте, Уважаемые Форумчане! Мне нужна Ваша помощь. Как вы наверно уже догадались, мне нужен самоучитель. Критерий самоучителя: 1)Учебник должен быть для начинающих программистов. 2) Учебник должен основываться на программировании на visual studio 2008 или лучше на 2013. (Если Вы не признаете visual studio, как хорошую среду для начинающего программиста, то пожалуйста посоветуйте Ваш...
C++ По заданным целым координатам точек на плоскости определить фигуру http://www.cyberforum.ru/cpp-beginners/thread1070386.html
По заданным целым координатам точек на плоскости определить фигуру, соединив точки в порядке ввода мы можем получить: четырехугольник с самопересечением выпуклый четырехугольник трапеция параллелограмм ромб квадрат прямоугольник
C++ Найти сумму четных цифр трехзначного числа Здравствуйте! Помогите, как написать чтоб найти сумму четных цифр трехзначного числа? подробнее

Показать сообщение отдельно
nill
9 / 9 / 0
Регистрация: 16.08.2009
Сообщений: 417
16.01.2014, 00:01  [ТС]     Как разделить строку(аналог функции explode)
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 функцию и хотелось бы отладить твой быстрый способ.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru