search字符串中的字符串

时间:2016-07-26 15:24:29

标签: c string

我有:"ETSGYU-deDEGUw<div>TOTO/$$/hfuiehfurei" 我希望在"<div>"之后和"/$$/"之前获取链条:"TOTO"

int main (int argc, char* argv[])
    {
    char IN[1000];
    char OUT[1000];
    strcpy(IN,"ETSGYU-deDEGUw<div>TOTO/$$/hfuiehfurei");

    ...

    printf("%s\n",OUT);
    }

祝你好运

4 个答案:

答案 0 :(得分:3)

使用<div class="flexslider"> <ul class="slides">     <li> Slide 1 <img src"img/animatedgif1.gif" /></li>     <li> Slide 2 <img src"img/animatedgif2.gif" /> </li>     <li> Slide 3 <img src"img/animatedgif3.gif" /></li>     <li> Slide 4 <img src"img/animatedgif4.gif" /></li>   </ul> @pm100

要不提供所有代码,请使用以下大纲。 OP仍然需要确定4个strstr()部分。

...

答案 1 :(得分:1)

我使用过类似的东西。虽然它并不特别安全。所以,如果你知道div和/ $$ /肯定都在字符串中,它就没问题了。为了使它更安全,请继续阅读strstr!

     char IN[1000];
     char* OUT;
     char* OUT2;
     int found, i;
     strcpy(IN,"ETSGYU-deDEGUw<div>TOTO/$$/hfuiehfurei");
     OUT=strstr(IN,"<div>");
     OUT2=strstr(OUT,"/$$/");
     OUT2[0] = '\0';
     OUT= OUT +5;
     printf("%s\n",OUT);

答案 2 :(得分:1)

您有很多方法可以做到这一点,包括:

  • 正则表达式:使用regex.h,这些起初有点难以使用,特别是如果您以前从未操纵过正则表达式。您可以在StackOverflow too上找到许多关于互联网的示例。
  • strstr() :此函数返回指向第一个字符串参数中第二个字符串参数的第一个出现的指针。所以,你可以尝试这种方式:

    char result[32] = { 0 };
    char *str = "ETSGYU-deDEGUw<div>TOTO/$$/hfuiehfurei";
    
    // Find the position of the differents markers ("<div>" and "/$$/")
    char *marker1 = strstr(str, "<div>");
    
    // Check if the pattern was found
    if (! marker1) {
        printf("Could not find string \"<div>\"\n");
        return;
    }
    
    // Place marker1 to the beginning of the text to copy           
    marker1 += strlen("<div>");          
    
    // Find the second marker "/$$/"
    char *marker2 = strstr(marker1, "/$$/");
    
    // Check if the pattern was found
    if (! marker2) {
        printf("Could not find string \"/$$/\"\n");
        return;
    }
    
    // Compute the len of the text to copy
    int len = marker2 - marker1;
    
    // Copy the text to the result buffer, but take care of the buffer overflow
    strncpy(result, marker1, len < 32 ? len : 32);
    

这是一个快速的例子,可以改进,但主要的想法就在这里。另外,请注意缓冲区长度。

答案 3 :(得分:0)

直接的方法可以采用以下方式

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main( void ) 
{
    char in[] = "ETSGYU-deDEGUw<div>TOTO/$$/hfuiehfurei";
    char *out = NULL;
    const char start[] = "<div>";
    const char end[]   = "/$$/";

    char *p = strstr( in, start );

    if ( p )
    {
        p += sizeof( start ) - 1;
        char *q = strstr( p, end );

        if ( q )
        {
            size_t n = q - p;

            out = malloc( n + 1 );
            if ( out )
            {               
                strncpy( out, p, n );
                out[n] = '\0';
            }
        }
    }

    if ( out )
    {
        puts( out );
    }

    free( out );

    return 0;
}

程序输出

TOTO