- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我今天有空,所以我说为什么不尝试用 c 解析 html 表(和一些用于流的 c++)所以我做了以下
int main()
{
char html[] ="<tr> \
<td>row 1, cell 1 < / td > \
<td>row 1, cell 2 < / td > \
< / tr> \
<tr> \
<td>row 2, cell 1 < / td > \
<td>row 2, cell 2 < / td > \
< / tr> ";
for (int i = 0; i < (int)(sizeof(html)/sizeof(html[0])); i++)
{
if (html[i] == '<')
{
for (int j = i + 1;; j++)
{
if (html[j] == '>')
{
for (int c = j + 1;; c++)
{
if (html[c] == '<')
break;
std::cout << html[c];
}
break;
}
}
}
}
return 0;
}
我第一次尝试左边的屏幕,但我在第二次尝试右边的时候做得更好
谁能通过隐藏那些不需要的符号来让它变得更好?
在使用 strlen(html) 之后我也去这个
最佳答案
除非您允许我远程访问您的计算机,否则我无法隐藏这些有趣的符号。但是,我可以建议您检查内部循环的终止条件,如下所示:
for (int c = j + 1;; c++)
{
if ((html[c] == '<') || c >= strlen(html))
return 0;
std::cout << html[c];
}
顺便说一句:
sizeof(char)
保证为 1,因此除法是多余的。strlen
(如果性能有问题,可能将其缓存到本地 :))。 编辑:
我使用 strlen
使与您的外部循环的代码重复更加明显。
您确实可以测试字符串终止以避免 Schlemiel the Painter's algorithm 的教科书案例,但这并不能挽救全局设计。
编辑(之二)
正如 Charles Beattie 指出的那样,这种方法的主要缺点之一是将整个输入视为一大块文本,使处理变得笨拙和缓慢。
这是分词器方法的好处之一:提取小的语法元素并将它们作为抽象对象使用,而不是费力地处理整个输入。
关于c++ - 在 C 中解析一个 html 表变得有趣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21020554/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!