char str[]="111||22||2222|33333||4444|5||666||777||777"; //строка в которой ищем
char delim[]="||"; //символ разделитель
size_t dlen = strlen(delim);
char * tokens[20]; //выделяем память под токены
int i;
for(i=0; i<20; ++i) tokens=NULL;
char * tok = str; //инициализируем указатель на токен
char * pos;
for(i=0;(pos=strstr(tok, delim))!=NULL&&i<20;++i) //ищем где в строке встречается разделитель
{
pos[0]='\0'; //вставляем символы конца строки за место разделителя
pos[1]='\0';
tokens=tok; //заполняем массив токенов
tok = pos+dlen; //инициализируем указатель на следующий токен
}
for(i=0; tokens!=NULL&&i<20; ++i) printf("tokens[%d] = %s\n\r", i, tokens); //печатаем массив токенов
как разбить строку
char * str="111||22|2222||33333||4444||5||666||777|777";
как мне получить из нее 7 подстрок на чисто Си? разделитель "||". Пробовала strtok сначала, но фишка в том, что разделителем должен быть именно "||", а в strtok получается, что разделитель "|".
Можно вот так вот :):
Цитата: Geksa
есть строка, например
char * str="111||22|2222||33333||4444||5||666||777|777";
как мне получить из нее 7 подстрок на чисто Си? разделитель "||". Пробовала strtok сначала, но фишка в том, что разделителем должен быть именно "||", а в strtok получается, что разделитель "|".
char * str="111||22|2222||33333||4444||5||666||777|777";
как мне получить из нее 7 подстрок на чисто Си? разделитель "||". Пробовала strtok сначала, но фишка в том, что разделителем должен быть именно "||", а в strtok получается, что разделитель "|".
а функция strtok действительно мало подходит для этих целей, так как в ней идет проверка не со всей строкой разделителем, а с совпадением с любым из символов в строке разделителя.