Получить строку между 2 строками - PullRequest
4 голосов
/ 27 июля 2010

Как получить строку, которая находится между двумя другими объявленными строками, например:

String 1 = "[STRING1]"
String 2 = "[STRING2]"

Источник:

"832h0ufhu0sdf4[STRING1]I need this text here[STRING2]afyh0fhdfosdfndsf"

Как мне получить "I need this text here"?

Ответы [ 3 ]

7 голосов
/ 27 июля 2010

Поскольку это домашнее задание, только подсказки:

  • Найти index1 вхождения String1
  • Найти index2 вхождения String2
  • Подстрока от index1+lengthOf(String1) (включительно) до index2 (эксклюзив) - это то, что вам нужно
    • При необходимости скопируйте это в буфер результатов (не забудьте завершить нулем)
2 голосов
/ 15 июня 2016

Может быть хорошим примером для std :: regex, который является частью C ++ 11.

#include <iostream>
#include <string>
#include <regex>

int main()
{
    using namespace std::string_literals;

    auto start = "\\[STRING1\\]"s;
    auto end = "\\[STRING2\\]"s;

    std::regex base_regex(start + "(.*)" + end);

    auto example = "832h0ufhu0sdf4[STRING1]I need this text here[STRING2]afyh0fhdfosdfndsf"s;

    std::smatch base_match;
    std::string matched;

    if (std::regex_search(example, base_match, base_regex)) {
        // The first sub_match is the whole string; the next
        // sub_match is the first parenthesized expression.
        if (base_match.size() == 2) {
            matched = base_match[1].str();
        }
    }
    std::cout << "example: \""<<example << "\"\n";
    std::cout << "matched: \""<<matched << "\"\n";

}

Печать:

example: "832h0ufhu0sdf4[STRING1]I need this text here[STRING2]afyh0fhdfosdfndsf"
matched: "I need this text here"

Я создал программу, которая создает две строки, начало и конец, которые служат моими началом и концом совпадений. Затем я использую строку регулярного выражения, которая будет искать их и сопоставлять с чем-либо промежуточным (включая ничего). Затем я использую regex_match, чтобы найти совпадающую часть выражения, и устанавливаю matched в качестве совпадающей строки.

Для получения дополнительной информации см. http://en.cppreference.com/w/cpp/regex и http://en.cppreference.com/w/cpp/regex/regex_search

0 голосов
/ 27 июля 2010

Используйте strstr http://www.cplusplus.com/reference/clibrary/cstring/strstr/, с этой функцией вы получите 2 указателя, теперь вы должны сравнить их (если pointer1 chars между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...