2016-05-30 3 views
-1

Я ищу очень простой способ вернуть массив строк, которые содержатся между конечными и ведущими строками. Вот пример:Получить массив строк между двумя строками в C

char *text = ;;;Text I want]]] Text I don't care about ;;;More Text I want]]] More text I don't care about 

Вызов stringBetweenString(";;;","]]]",text) должен возвращать массив (const char *myArray[2]) со следующими значениями: "Text I want","More Text I want".

К сожалению, у меня нет доступа к RegEx для этого приложения и внешних библиотек. Любая помощь будет принята с благодарностью, спасибо!

+2

'strstr()' поможет вам найти разделители. 'strncpy' поможет вам скопировать части строки. – myaut

+1

Очень похоже на школьное задание. Покажите нам свой код, что вы пробовали, поскольку предлагает @Ben, а затем мы можем помочь. – Petr

+0

Я пробовал использовать два ответа на этот пост: http://stackoverflow.com/questions/30302294/extract-string-between-two-specific-strings-in-c, но я не могу понять, как это получить для работы с несколькими экземплярами разделителей. Он вернет только первый экземпляр. –

ответ

2

Там нет необходимости в regex, как и другие отметили strstr будет искать в строке для вхождения подстроки, возвращая указатель на начало подстроки на успех, NULL иначе. Вы можете использовать это с простой арифметикой указателей для разбора разыскиваемого текста из между подстрокой, например .:

#include <stdio.h> 
#include <string.h> 

#define MAXC 128 

int main (void) { 

    char *text = ";;;Text I want]]] Text I don't care about ;;;More " 
       "Text I want]]] More text I don't care about"; 
    char buf[MAXC] = "", *p = text, *ep; 

    while ((p = strstr (p, ";;;"))) { 
     if ((ep = strstr (p, "]]]"))) { 
      strncpy (buf, p + 3, ep - p - 3); 
      buf[ep - p - 3] = 0; 
      printf ("buf: '%s'\n", buf); 
     } 
     else 
      break; 
     p = ep; 
    } 

    return 0; 
} 

Примером использование/выводом

$ ./bin/splitbetween 
buf: 'Text I want' 
buf: 'More Text I want' 
+0

Это решение не удастся, если вы поменяете местами «Text I want» и «More Text I want'' (или используйте другую платформу, например, DeathStation3000). Совет:' strncpy() ' – wildplasser

+0

проскользнул в прошлое я ... крепление. –

+0

Это работает потрясающе, спасибо. Поэтому, если я правильно понимаю это, вы проверяете, есть ли экземпляр начального шапки, который все еще существует в строке, что будет означать, что еще есть какой-то текст, который можно найти. Затем вы используете длины выделенных строк из strstr для копирования поверх новой строки и добавления ее в буфер? –

Смежные вопросы