fork download
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. char* find_markers(char* haystack, const char* marker_opening, const char* marker_closing, char* &contents, char* &after)
  6. {
  7. // ...<marker1>... ... ...<marker2>...
  8. // ^return ^contents ^NULL ^after
  9.  
  10. char* marker_begin = strstr(haystack, marker_opening);
  11. if(marker_begin)
  12. {
  13. contents = &marker_begin[strlen(marker_opening)];
  14.  
  15. char* marker_end = strstr(contents, marker_closing);
  16. if(marker_end)
  17. {
  18. haystack[marker_end-haystack] = NULL;
  19. after = &marker_end[strlen(marker_closing)];
  20. return marker_begin;
  21. }
  22. return NULL;
  23. }
  24. return NULL;
  25. }
  26.  
  27. int main()
  28. {
  29.  
  30. char text[] = " <tag>contents1</tag> <tag><tag> ";
  31. char* cursor = text;
  32. char* contents = NULL;
  33.  
  34. while(true)
  35. {
  36. if(!find_markers(cursor, "<tag>", "</tag>", contents, cursor)) break;
  37. cout << contents << "\n";
  38. }
  39.  
  40. return 0;
  41. }
  42.  
Success #stdin #stdout 0s 4960KB
stdin
Standard input is empty
stdout
contents1