一旦我将Ubuntu发行版升级到11.10,我就开始看到gcc的奇怪链接器行为.我能够通过将我的-l参数移动到gcc命令的末尾来修复问题(我的问题类似于此线程中描述的问题,并且建议的解决方案对我有用......谢谢!).
我的问题是......为什么我现在才有这个问题?我已经在OS X和Ubuntu上开发和测试了这段代码了一段时间:我从来不知道-l命令应该在你的.c文件之后,但即便如此,这从来没有给我带来过问题.我猜它与GCC版本有关,而不是Ubuntu版本.
这个新版本是否比早期版本更严格地执行此要求?
我有以下Perl脚本计算字符串中的Fs和Ts的数量:
my $str = "GGGFFEEIIEETTGGG";
my $ft_count = 0;
$ft_count++ while($str =~ m/[FT]/g);
print "$ft_count\n";
Run Code Online (Sandbox Code Playgroud)
是否有更简洁的方法来计算(换句话说,结合第2和第3行)?
我有以下dot/neato文件...
graph G
{
node [color=Red]
r01
r02
r03
r04
r05
r06
r07
r08
r09
r10
r11
node [color=Blue]
p01
p02
p03
p04
p05
p06
p07
p08
p09
p10
p11
p12
p13
r01 -- r02
r01 -- p01
r01 -- p02
r02 -- p01
r02 -- p02
p01 -- p02
r03 -- p03
r04 -- r05
r04 -- p04
r04 -- p05
r04 -- p06
r05 -- p04
r05 -- p06
p04 -- p05
p04 -- p06
r06 -- r07 …Run Code Online (Sandbox Code Playgroud) 我有以下.dot文件.
digraph
{
node [color=Limegreen,fontcolor=Limegreen,shape=oval]
ilocus [label="iLocus"]
gilocus [label="giLocus"]
pilocus [label="piLocus"]
nilocus [label="niLocus"]
silocus [label="siLocus"]
cilocus [label="ciLocus"]
filocus [label="fiLocus"]
iilocus [label="iiLocus"]
node [color=Blue,fontcolor=Blue,shape=diamond]
containgene [label="Contains gene(s)?"]
proteincoding [label="Protein coding?"]
multiplegenes [label="Multiple genes?"]
geneflank [label="Flanked by genes\non both sides?"]
ilocus -> containgene
containgene:e -> geneflank [xlabel="No"]
geneflank:e -> filocus [xlabel="No"]
geneflank:w -> iilocus [xlabel="Yes"]
containgene:w -> gilocus [xlabel="Yes"]
gilocus -> proteincoding
proteincoding:e -> nilocus [xlabel="No"]
proteincoding:w -> pilocus [xlabel="Yes"]
pilocus -> multiplegenes
multiplegenes:e -> silocus [xlabel="No"]
multiplegenes:w -> cilocus …Run Code Online (Sandbox Code Playgroud) 我有一个非常大的数据文件,该数据文件中的每条记录有4行.我编写了一个非常简单的C程序来分析这种类型的文件并打印出一些有用的信息.该计划的基本思想是这样的.
int main()
{
char buffer[BUFFER_SIZE];
while(fgets(buffer, BUFFER_SIZE, stdin))
{
fgets(buffer, BUFFER_SIZE, stdin);
do_some_simple_processing_on_the_second_line_of_the_record(buffer);
fgets(buffer, BUFFER_SIZE, stdin);
fgets(buffer, BUFFER_SIZE, stdin);
}
print_out_result();
}
Run Code Online (Sandbox Code Playgroud)
这当然会遗漏一些细节(健全/错误检查等),但这与问题无关.
该程序工作正常,但我正在使用的数据文件是巨大的.我想我会尝试通过使用OpenMP并行化循环来加速程序.但是,经过一些搜索后,OpenMP似乎只能处理for预先知道迭代次数的循环.由于我事先并不知道文件的大小,甚至简单的命令都wc -l需要花费很长时间才能运行,我该如何并行化这个程序呢?
我需要在文件中搜索字符串,删除包含该字符串的任何行,并删除包含该字符串的任何行后面的两行.我希望我能用这样的东西来完成这个......
$ grep -v -A 2 two temp.txt
one
five
$
Run Code Online (Sandbox Code Playgroud)
......但不幸的是,这不起作用.有一个简单的我可以使用grep或其他shell命令吗?
我有一个区间G,以及一组不同长度的非重叠子区间s 1,s 2,...,s n.
G |--------------------------------------------------------------// //-----------|
s1 [---] s3 [------------------]
s2 [------] sn [--]
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种算法来获取所有这些子间隔,然后将它们再次放在G上,这样它们就不会重叠.做这个的最好方式是什么?
最简单,最天真的方法是简单地随机选择每个子区间的起始位置,一旦放置所有区间就检查重叠,然后如果存在重叠则重新开始.如果子间隔提供G的稀疏覆盖,但随着密度的增加,效率会越来越低,这可能会非常快.
类似的想法是在放置每个子间隔时检查重叠.然而,对效率的类似担忧.
有没有更聪明的方法来处理这个?
UPDATE
澄清几点:
我有两个列表,A&B,我想测试是否A包含在B."包含"是指元素A以完全相同的顺序出现,而B它们之间没有其他元素.我正在寻找的是非常类似于A in B它们是字符串的行为.
A将重复一些要素.我们可以假设A将比短于B.
关于SO的类似问题有很多答案,但大多数答案都有不同的问题:
A元素B吗?(不是我的问题:B是一个平面列表,而不是列表列表.)A包含所有元素B?(不是我的问题:我也关心订单.)A一个子列表B?(不是我的问题:我不想知道这些元素是否以A相同的顺序出现B,我想知道它们是否与它们在某处完全一样B.)如果操作是作为关键字实现的containedin,它将表现得像这样.
>>> [2, 3, 4] containedin [1, 2, 3, 4, 5]
True
>>> [2, 3, 4] containedin [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
False
>>> …Run Code Online (Sandbox Code Playgroud) 几年前,我在简要介绍Fortran77之后,正在学习Fortran90.在Fortran中打印整数时,必须指定要为打印整数保留的空格数.考虑这个程序......
implicit none
integer :: i
i = 123
write(*, '(A, I3, A)') "'", i, "'" !3 spaces for output = no padding
write(*, '(A, I5, A)') "'", i, "'" !5 is too many, so output is padded
write(*, '(A, I2, A)') "'", i, "'" !2 is too few, so output is jibberish
write(*, '(A, I:, A)') "'", i, "'" !Default behavior
end program
Run Code Online (Sandbox Code Playgroud)
...生成以下输出.
'123'
' 123'
'**'
' 123'
Run Code Online (Sandbox Code Playgroud)
当我不知道整数中有多少位数时,如何为整数打印分配正确的空间量?
更新:如果您的编译器符合F95,您可以使用I0编辑描述符(即,在上面的示例'(A, I0, A)'中为 …
GNU Make包含一个称为的特殊目标.DELETE_ON_ERROR。如果您的Makefile中包含此文件,Make将删除其构建序列以非零返回状态完成的任何目标。这很有用,因此在以后的调用中,Make不会假定目标已正确构建。
这是一个虚拟的例子。
.DELETE_ON_ERROR:
out.dat: in.dat
touch out.dat
false
Run Code Online (Sandbox Code Playgroud)
因为false给出的返回值非零,所以构建被视为失败,并且Make删除了out.dat目标。这是广告和预期的行为。但是,当目标是目录时,似乎不会保留此行为。考虑另一个虚拟的例子。
.DELETE_ON_ERROR:
outdir/: in.dat
mkdir outdir/
false
Run Code Online (Sandbox Code Playgroud)
在这种情况下,构建会再次失败,但是Make不会删除outdir目录。有什么方法可以指示Make进行此操作吗?