scanf跳过所有字符串直到字符串

时间:2015-10-19 11:38:20

标签: c string scanf

是否可以使用scanf跳过所有字符,直到我到达特定的字符串。

我有一个html文件,我想跳过所有字符,包括这个字符串:"<h2><a href=",然后读取两个引号之间的http链接。

2 个答案:

答案 0 :(得分:1)

我偶然发现了一个古老的问题。尽管如此,它仍然在这里,我想我得到了一个很好的答案。那么,为什么不留下下一代,对吧?

你被告知scanf无法做到。好吧,我不同意,这就是原因:

scanf可以忽略所有内容,直到找到所搜索字符串的第一个字母

scanf ("%*[^<]");

然后它可以尝试忽略您正在寻找的字符串(char by char)。

found = scanf ("<h2><a href=\"%[^\"]", str_link) == 1;

如果它还没有它将会失败并且将停止执行,永远不会进入%[^\"]命令,该命令会读取/存储所有内容,直到找到"个字符。

在这种情况下,它返回0EOF,因为无法执行扫描(它返回它能够填充的变量的数量)

现在,如果它找到了,它将最终执行读取并返回1

  • 注意:您应该查看文档以获取准确的信息,可以在cplusplus.com找到

    while ( !found && !feof(stdin) )
    {
        scanf ("%*[^<]");
        found = scanf ("<h2><a href=\"%[^\"]", str_link) == 1;
    }
    

我想可以忽略文件的其余部分。 由你决定。

我认为这是一种很好的方法,因为它充分利用了scanf的速度,并且它并不要求您存储整个文件。 这个想法可以应用于许多其他任务。

scanf是一个非常强大的工具,虽然有点棘手。

答案 1 :(得分:0)

你总是可以搜索字符串href =“然后在那里设置指针。然后复制或扫描刺痛,直到你再次遇到”。 而(* P!= ''“){ 复制到abuffer; }