我试图将剪切命令的输出分配给变量,但是我遇到了一个奇怪的问题.我正在使用tcsh shell.
$echo $0
tcsh
Run Code Online (Sandbox Code Playgroud)
这是我正在运行的命令:
$set a=`cut -f2 -d' ' test.txt`
Missing }. //This is the output I am getting
Run Code Online (Sandbox Code Playgroud)
现在该文件非常简单(这不是我正在处理的文件,但我将问题减少到了这一点.)
的test.txt:
{ {corner
Run Code Online (Sandbox Code Playgroud)
而已!这是文件.如果我将文件更改为:
{ {corner}
Run Code Online (Sandbox Code Playgroud)
语句有效,但"a"获得以下值:
$echo $a
corner //Please note its not {corner} but corner
Run Code Online (Sandbox Code Playgroud)
因此我认为shell试图{corner
作为一个命令执行 ,因为它缺少关闭括号shell抱怨.有谁知道它为什么会出现这种行为?我的理解是它应该只将cut的输出分配给变量,但看起来像递归分配它!新手
我有以下基本代码:
proc test {} {
set my_var2 3
foreach iter {1 2 3} {
set my_var1 4
set my_var2 5
puts "Inside: $my_var1 $my_var2\n"
}
puts "outside $my_var1, $my_var2\n" ;#WHY IT DOES NOT GIVE ERROR HERE!
}
test ;#calling the function
Run Code Online (Sandbox Code Playgroud)
该程序的输出是这样的:
Inside: 4 5
Inside: 4 5
Inside: 4 5
outside 4, 5
Run Code Online (Sandbox Code Playgroud)
现在我的困惑是因为my_var1
只在foreach循环的局部范围内定义为什么它的值甚至可以在循环外使用?换句话说,什么决定了Tcl中变量的范围?非常感谢您的帮助!
我有一个perl哈希,我正在索引这样:
my %hash;
$hash{'number'}{'even'} = [24, 44, 38, 36];
$hash{'number'}{'odd'} = [23, 43, 37, 35];
Run Code Online (Sandbox Code Playgroud)
当我尝试打印这样的关键名称时:
foreach my $key (keys %hash{'number'})
{
print "Key: $key\n";
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Type of arg 1 to keys must be hash (not hash slice) at test.pl
Run Code Online (Sandbox Code Playgroud)
但是当我将数组ref传递给函数并在那里打印时,它会打印值:
test(\%hash);
sub test
{
my ($hash) = @_;
foreach my $key (keys %{$hash->{'number'}})
{
print "Key: $key\n"; #outputs: even odd
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我这里出了什么问题吗?另外,如果我有多键哈希,在这种情况下哈希被'number'和'even'或'odd'索引,如果我做这样的事情:
foreach my $key (keys %hash)
{
print "First Key: $key\n"; #Outputs number
}
Run Code Online (Sandbox Code Playgroud)
然后我总是将"数字"作为输出权,我永远不会得到"偶数","奇数"作为输出,对吗?这只是为了知道良好的编码实践:)
这是完整的代码: …
我正在参加http://www.hackerrank.com上的在线编程竞赛.我正在研究的问题之一是找到一些字符串字符串的字谜.我已经解决了这个问题但是当我尝试上传它时,它在许多测试用例中都失败了.由于实际的测试用例对我来说是隐藏的,我不知道为什么它失败但我认为这可能是一个可扩展性问题.现在我不希望有人给我一个现成的解决方案,因为这不公平,但我只是好奇人们对我的方法的看法.
以下是该网站的问题描述:
既然国王知道如何找出一个给定的单词是否有一个回文或不回文的字谜,他就面临着另一个挑战.他意识到,对于给定的单词,可能存在多个字谜.你能帮他找出一个特定单词可能有多少字谜吗?
国王有很多话.对于每个给定的单词,国王需要找出作为回文的字符串的字符数.由于字谜的数量可能很大,国王需要字谜数%(10 9 + 7).
输入格式:
包含输入字符串的单行输出格式:
包含anagram字符串数的单行.palindrome % (109 + 7)
制约因素:
1<=length of string <= 105
- 字符串的每个字符都是小写字母.
- 每个测试用例至少有1个anagram,这是一个回文.
样本输入01:
Run Code Online (Sandbox Code Playgroud)aaabbbb
样品输出01:
Run Code Online (Sandbox Code Playgroud)3
说明:
作为回文的给定字符串的三种排列可以作为abbabba,bbaaabb和bababab给出.样本输入02:
Run Code Online (Sandbox Code Playgroud)cdcdcdcdeeeef
样本输出02:
Run Code Online (Sandbox Code Playgroud)90
如问题描述中所指定的,输入字符串可以大到10 ^ 5,因此大字符串的所有回文都是不可能的,因为我将遇到数字饱和度问题.此外,因为我只需要给出一个基于模(10 ^ 9 + 7)的模数答案,我想用基数(10 ^ 9 + 7)记录数字,并且在所有计算之后采用基数的分数部分(10 ^ 9) + 7)答案,因为那将是模数.
我的算法如下:
对于DP,以下是子问题:previous_count = 1
对于每个额外的角色
added number of palindromes = previous_count * (number_of_char_already_seen + 1)/(number of char same as current char)
这是我的代码:
#include <iostream> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个二维数组复制到另一个数组中。但是,我遇到了一个奇怪的问题,我的函数没有打印第一行。但是,值是存在的,因为当我单独打印第一行时,它确实会被打印出来。
这是我的 perl 代码:
#!/usr/bin/perl
use UNIVERSAL 'isa';
#Function to print the contents of an array
sub printArray {
my ($vHash) = @_;
if (isa($vHash, 'ARRAY')) {
foreach my $el (@$vHash) {
print "A: $el\n";
printArray($el);
}
} else {
return;
}
return;
}
my @array = "";
my @line1 = (1, 2, 3);
my @line2 = (3, 4, 5);
my @line3 = (6, 7, 8);
#Creating a 2D array
@array = (\@line1, \@line2, \@line3);
my @array2 = "";
my …
Run Code Online (Sandbox Code Playgroud) 当我对输出进行类型转换时,我正在观察一个有趣的结果:
这是代码片段:
int bitSize = (int)log10(1.0*16)/log10(2.0); //bistsize = 3 it should be 4
int temp = log10(1.0*16)/log10(2.0); //temp = 4
Run Code Online (Sandbox Code Playgroud)
基本上我想把log2(16)应该是4.我认为我对类型转换的理解是错误的.有什么建议?
谢谢
我正在使用Simple Scalar工具集来运行缓存关联性的一些模拟.我看到printf函数有一些奇怪的行为.这是代码片段:
printf(" Name: %s %d %d %d \n", name, nsets, cp->set_shift, cp->set_mask);
printf(" Name: %s %d %d %d \n", name, cp->set_mask, nsets, cp->set_shift);
Run Code Online (Sandbox Code Playgroud)
printf行是一个接一个,其间没有其他代码.这是输出:
Name: dl1 128 5 127
Name: dl1 127 0 128
Run Code Online (Sandbox Code Playgroud)
第二个printf的输出是错误的.第二个printf的输出应该是:
Name: dl1 127 128 5
Run Code Online (Sandbox Code Playgroud)
更改printf语句的相对顺序不会更改输出.我缺少什么部分的printf才能理解?
关于新手
我对grep有一个非常基本的困惑.假设我有一个以下文件要grep:
test.txt:
This is an article
from some newspaper
Article is good
newspaper is not.
Run Code Online (Sandbox Code Playgroud)
现在如果我用下面的表达式grep
grep -P "is\s*g" test.txt
Run Code Online (Sandbox Code Playgroud)
我得到了这条线:
Article is good
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做:
grep -P "is*g" test.txt
Run Code Online (Sandbox Code Playgroud)
我什么都没得到.我的问题是因为asterix(*)是一个表示前一个字符重复0次或更多的通配符,所以grep的输出不应该相同.为什么"s"的零次或多次重复没有给出任何输出?
我在这里想念的是什么 谢谢您的帮助!