
我正在尝试编写一种算法,用于检测下图中"RF"和"WOOLF"之间的空间.我需要类似Scanline for COLUMNS而不是行.我的算法将扫描每一列是否存在黑色像素,如果发现任何它将存储'1',否则它将存储'0',因此例如上面的图像可能是:000001111111111111111111100000000000000000000000011111111111111111111111111111111111111111111111111所以我将知道该空间从像素30开始.
我用c ++中的1D数组有一个小问题.我有一个功能线:
void func(int (&array)[???])
{
// some math here;
"for" loop {
array[i] = something;
}
}
Run Code Online (Sandbox Code Playgroud)
我在代码中的某处调用函数,在我进行数学运算之前,我无法知道数组的维数.该数组作为引用转到函数!,因为我需要在main()函数中使用它.我怎么能像这样分配数组?所以数组有?? 维度转到函数作为引用然后我必须放置维度并写入一些值.
您可能知道有两种不同的正则表达式实现:一种使用回溯(pcre),另一种使用有限自动机(re2).
这两种算法都有其局限性:在特定情况下,pcre可以采用指数时间来查找匹配,而有限自动机不支持反向引用.
PCRE实现支持反向引用,在像匹配的表情非常低效的/a?a?a?a?aaaa/反对aaaa,更多的a的表达和输入有-的时间也就越长,并与他们的30+它会占用大量时间,如果.
具有有限自动机的版本可以很好地处理所有这些实现,并且输入具有O(N)复杂性,但不支持反向引用:
pcre时间对复杂的表达式 - http://i.stack.imgur.com/D4gkC.png NFA处理这些,但不支持反向引用 - http://i.stack.imgur.com/t2EwI.png
有关反向引用的一些信息支持:
RE2 - http://code.google.com/p/re2/
一个重要的例外是RE2 不再支持反向引用 和广义零宽度断言,因为它们无法有效实现.
汤普森NFA - http://swtch.com/~rsc/regexp/regexp1.html
如前所述,没有人知道如何有效地实现具有反向引用的正则表达式,尽管没有人能够证明它也是不可能的.(具体来说,问题是NP完全,这意味着如果有人确实找到了有效的实施方案,那对计算机科学家来说将是一个重大新闻,并且会赢得一百万美元的奖金.)
所以我创建了自己的版本,它既支持反向引用又具有O(N)复杂性.它用haskell编写,大约600行(其中约200个是空白的,约200个类型的声明,可以跳过)行长.它在大约10秒内通过/a?a?aa/反对aa(100个a)来咀嚼,据我所知它是唯一可以匹配的版本
/a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?(a?a?a?a?a?a?a?a?a?a?aaaaaaaaaa)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\1/
Run Code Online (Sandbox Code Playgroud)
反对
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Run Code Online (Sandbox Code Playgroud)
在理智(约10秒)的时间.它当然支持基本正则表达式规范中列出的所有其他功能,我在互联网上找到了它.
问题是:它真的是"计算机科学家的重大新闻",如果是这样,我该怎么办?
PS:我将在大约一周内显示源代码 - 我仍然希望使用分析器运行一些测试并替换几个内部数据结构.
我尝试使用Json.net解析简单的JSON
string inputJson = @"
{
""modificationTime"" : ""\/Date(1224043200000)\/""
}";
Run Code Online (Sandbox Code Playgroud)
财产是定义的
[JsonProperty("modificationTime")]
[JsonConverter(typeof(JavaScriptDateTimeConverter))]
public DateTime ModificationTime { get; set; }
Run Code Online (Sandbox Code Playgroud)
但DeserializeObject使用以下消息抛出异常:"解析日期时出现意外的标记或值.令牌:日期,值:10/15/2008 04:00:00"
好吧,据我所知它实际上已经解析了日期,不是吗?从JavaScriptDateTimeConverter.cs中的第68行抛出此异常:
68 if (reader.TokenType != JsonToken.StartConstructor || string.Compare(reader.Value.ToString(), "Date", StringComparison.Ordinal) != 0)
69 throw new Exception("Unexpected token or value when parsing date. Token: {0}, Value: {1}".FormatWith(CultureInfo.InvariantCulture, reader.TokenType, reader.Value));
70
71 reader.Read();
Run Code Online (Sandbox Code Playgroud)
在这个地方reader.TokenType是Date和reader.Value.ToString()是10/15/2008 04:00:00.有任何想法吗?
我install我的Maven项目:
mvn clean install
Run Code Online (Sandbox Code Playgroud)
一切正常,JAR文件在/target目录中创建.现在我再次运行它:
mvn install
Run Code Online (Sandbox Code Playgroud)
Maven 再次执行单元测试和静态代码分析.我没有对.java文件进行任何更改,JAR就在那里,为什么要再次运行测试呢?我做错了什么或是maven是如何设计的?
我在我的C#应用程序中收到此错误.我使用log4net作为日志记录工具.
这是我的app.config文件:
<configuration>
<configSections>
<section name="log4net" type ="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="myLogger" />
</root>
<appender name="myLogger" type="log4net.Appender.RollingFileAppender,log4net">
<param name="File" value="C:\MyApp\Logs\appLog.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="100KB" />
<staticLogFileName value="true" />
<datePattern value="yyyyMMdd" />
<lockingModel value="log4net.Appender.FileAppender+MinimalLock" />
<immediateFlush value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
有没有办法限制EditText在运行时只能输入2位数字.
例如:
如果我设置我的android:inputType="numberDecimal",我输入其中的值.它接受值123.000000000000.但我想限制它像123.00
有没有可能的方法呢?
var str = "abcd1234";
var first = str.match(/^abcd(\d+)$/)[0]; //matches abcd1234
var number = str.match(/^abcd(\d+)$/)[1]; //matches 1234 only
Run Code Online (Sandbox Code Playgroud)
为什么这个正则表达式首先与整个str匹配,然后匹配数字部分?看着它我会说它总是必须匹配abcd然后一个或多个数字?"abcd"不是比赛的强制性部分吗?
顺便说一句,我发现这个正则表达式是这个问题的一部分.
谢谢.
我想要实现的是每当<select>下拉列表被更改时我想要更改前的下拉列表的值.我正在使用1.3.2版本的jquery并在更改事件上使用但是我在那里得到的值是在更改之后.
<select name="test">
<option value="stack">Stack</option>
<option value="overflow">Overflow</option>
<option value="my">My</option>
<option value="question">Question</option>
</select>
Run Code Online (Sandbox Code Playgroud)
让我们说当前选择My当我在onchange事件中将其更改为堆栈时(即当我将其更改为堆栈时),我希望它是先前的值,即我在这种情况下的预期.
怎么能实现这一目标?
编辑:在我的情况下,我在同一页面中有多个选择框,并希望同样的事情应用于所有这些.此外,我的所有选择都是在通过ajax加载页面后插入的.