获取2个字符串之间的字符串

时间:2010-07-26 21:40:02

标签: c++ string

如何获取两个其他声明字符串之间的字符串,例如:

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

来源:

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

如何获得"I need this text here"

3 个答案:

答案 0 :(得分:7)

由于这是作业,只有线索:

  • 查找index1
  • 出现的String1
  • 查找index2
  • 出现的String2
  • index1+lengthOf(String1)(包括)到index2(独家)的子串是您所需要的
    • 如有必要,将其复制到结果缓冲区(不要忘记空终止)

答案 1 :(得分:2)

对于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"

我所做的是创建一个程序,创建两个字符串,start和end,作为我的开始和结束匹配。然后我使用正则表达式字符串来查找它们,并匹配中间的任何内容(包括任何内容)。然后我使用regex_match查找表达式的匹配部分,并将匹配设置为匹配的字符串。

有关详细信息,请参阅http://en.cppreference.com/w/cpp/regexhttp://en.cppreference.com/w/cpp/regex/regex_search

答案 2 :(得分:0)

使用strstr http://www.cplusplus.com/reference/clibrary/cstring/strstr/,使用该函数,您将得到2个指针,现在您应该比较它们(如果指针1&lt; pointer2),如果是,请读取它们之间的所有chars。< / p>