列表

详情


OR79. 字符串提取

描述

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

输入描述

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

输出描述

截取后的字符串

示例1

输入:

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

输出:

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

示例2

输入:

abc

输出:

null

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 228KB, 提交时间: 2019-05-05

#include<stdio.h>
#include<string.h>
int main()
{
    char str[128];
    scanf("%s",str);
    int len = strlen(str);
    int l,r;
    for(l = len - 5; l >= 0;l--)
        if(str[l] == '[' && str[l+1]=='i'&&str[l+2]=='m'&&str[l+3]=='g'&&str[l+4]==']')break;
    if(l < 0)
    {
        printf("null");
        return 0;
    }
    for(r = len - 1; r >= l + 10;r--)
        if(str[r] == ']' && str[r-1]=='g'&&str[r-2]=='m'&&str[r-3]=='i'&&str[r-4]=='\\'&&str[r-5]=='[')break;
    if(r < l + 10)
    {
         printf("null");
        return 0;
    }
    str[r+1] = '\0';
    printf("%s",str + l);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 236KB, 提交时间: 2019-01-30

#include<stdio.h>
#include<string.h>
int main()
{
    char str[128];
    scanf("%s",str);
    int len = strlen(str);
    int l,r;
    for(l = len - 5; l >= 0;l--)
        if(str[l] == '[' && str[l+1]=='i'&&str[l+2]=='m'&&str[l+3]=='g'&&str[l+4]==']')break;
    if(l < 0) 
    {
        printf("null");
        return 0;
    }
    for(r = len - 1; r >= l + 10;r--)
        if(str[r] == ']' && str[r-1]=='g'&&str[r-2]=='m'&&str[r-3]=='i'&&str[r-4]=='\\'&&str[r-5]=='[')break;
    if(r < l + 10)
    {
         printf("null");
        return 0;
    }
    str[r+1] = '\0';
    printf("%s",str + l);
    return 0;
}

上一题