题目描述:

请从字符串中提取以最后一个[img]开头、以最后一个[\img]结尾的字符串,未找到匹配的字符串返回"null"。

输入描述:

可能包含[img][\img]的字符串

输出描述:

截取后的字符串

输入样例1:

bbb[img]ccc[img]ddd[\img]eee[\img]

输出样例1:

[img]ddd[\img]eee[\img]

输入样例2:

abc

输出样例2:

null

解题思路:

先找出最后一个[img]的'['所在下标i和最后一个[\img]的']'所在下标j,最后一个[img]的'['所在下标i一定要小于最后一个[\img]的']'所在下标j才能截取子字符串进行输出(要是i>j就输出"null"),然后从i开始截取(j-i+1)个长度的子字符串进行输出即可。

AC代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    string str;
    while(getline(cin,str))
    {
        int len = str.length();
        int i = str.rfind("[img]",len-1);     //最后一个[img]的'['所在下标
        int j = str.rfind("[\\img]",len-1) + 5;   //最后一个[\img]的']'所在下标
        if(i < j)    // 可能出现\img前面没有img的情况
        {
            cout << str.substr(i,j-i+1) << endl;   //从第一个[img]开始截取(j-i+1)个长度的子字符串
        }
        else  
        {
            cout << "null" << endl;
        }
    }
    return 0;
}