使用scanf是否可能跳过所有字符直到我到达特定字符串。
我有一个html文件,我想跳过所有字符,包括这个字符串:"<h2><a href="
,然后读取两个引号之间的http链接。
我发现了一个很老的问题。尽管如此,它仍然存在,我认为我有一个好答案。那么,为什么不留给后代呢?
你被告知scanf
无法做到这一点。我不同意,并且原因如下:
scanf
可以忽略直到找到所需字符串的第一个字母之前的所有内容。
scanf ("%*[^<]");
然后它可以尝试忽略你要查找的字符串(逐个字符忽略)。
found = scanf ("<h2><a href=\"%[^\"]", str_link) == 1;
如果它不是它本身,则失败并停止执行,永远不会到达%[^\"]
命令,该命令会读取/存储直到找到"
字符的所有内容。
在这种情况下,它返回0
或EOF
,因为无法执行扫描(它返回能够填充多少变量)
现在,如果它确实找到了,那么它将最终执行读取并返回1
。
note: you should check the documentation for precise information, which can be found at cplusplus.com
while ( !found && !feof(stdin) )
{
scanf ("%*[^<]");
found = scanf ("<h2><a href=\"%[^\"]", str_link) == 1;
}
我认为文件的其余部分可以忽略。 由你决定。
我认为这是一个很好的方法,因为它充分利用了scanf
的速度,并且不需要你存储整个文件。
这个想法可以应用到许多其他任务中。
scanf
是一个非常强大的工具,尽管有点棘手。
href="
并在那里设置一个指针。然后复制或扫描字符串,直到再次遇到"
。while (*p != '"') {
// copy to a buffer
}
fgets
+strstr
。 - cadanilukscanf
。 - BLUEPIXY