我对一个简单的程序有一个想法,这将帮助我在C语言中使用运算符优先级.最困难的部分是括号表达式.例如,我想要这个:
*a.x++ = *b.x++
Run Code Online (Sandbox Code Playgroud)
转换为:
((*(((a).(x))++)) = (*(((b).(x))++)))
Run Code Online (Sandbox Code Playgroud)
我在这些步骤中手动完成的操作:
*a.x++ = *b.x++
*(a).(x)++ = *(b).(x)++
*((a).(x))++ = *((b).(x))++
*(((a).(x))++) = *(((b).(x))++)
(*(((a).(x))++)) = (*(((b).(x))++))
((*(((a).(x))++)) = (*(((b).(x))++)))
Run Code Online (Sandbox Code Playgroud)
以编程方式完成此操作的最佳方法是什么?我可以使用的解决方案吗?我更喜欢用PHP,C,C++,Python或Ruby来做这件事.
(这不是我的计划的全部想法,它只是第一步.)
(第一次海报,谷歌的长期访客)
我正在尝试提取一些方括号的内容,但是我有一点麻烦.我已经让它适用于圆括号,如下所示,但我看不出它应该如何修改以适用于方括号.我本以为在这个例子中替换正方形的圆形反之亦然,但显然不行.
它需要忽略括号内的括号.所以它不会返回(11)但会返回(10(11)12).
$preg = '#\(((?>[^()]+)|(?R))*\)#x';
$str = '123(456)(789)(10(11)12)';
if(preg_match_all($preg, $str, $matches)) {
$matches = $matches[0];
} else {
$matches = array();
}
echo '<pre>'.print_r($matches,true).'</pre>';
This returns:
Array (
[0] => (456)
[1] => (789)
[2] => (10(11)12)
)
Run Code Online (Sandbox Code Playgroud)
哪个是完美的.但是,如何才能使用方括号代替字符串,例如:
$str = '123[456][789][10[11]12]';
Run Code Online (Sandbox Code Playgroud) 我只花了3个小时想知道为什么我不能开始一个会话,然后意识到我用过:
session_start;
Run Code Online (Sandbox Code Playgroud)
当我应该使用时:
session_start();
Run Code Online (Sandbox Code Playgroud)
我没有收到任何错误消息!
也许那时候,我想,这是一种将函数与变量区分开来的懒惰方式 - 但后来记得它不能像变量那样需要$
任何人都可以告诉我为什么需要括号,以及为什么不使用它们时没有错误?
我只是在JavaScript中遇到了一些符号:
var a = (1,2,3,4,5);
Run Code Online (Sandbox Code Playgroud)
在上述情况下,这将始终返回最后一个值5.我知道使用括号来命名我的JavaScript代码,但从未见过它以这种方式使用.
这种符号有什么用处,还是只是一些JavaScript副产品?
今天我和Swift一起玩,一些奇怪的类型开始出现:
let flip = Int(random()%2) //or arc4random(), or rand(); whatever you prefer
Run Code Online (Sandbox Code Playgroud)
如果我输入flipXcode 6(Beta 2),弹出自动完成,并说flip是类型(Int)而不是Int.
这很容易改变:
let flip : Int = Int(random()%2)
let flop = random()%2
Run Code Online (Sandbox Code Playgroud)
现在翻转和翻牌都是类型Int而不是(Int)
更多地使用它,这些"括号类型"是可预测的,你可以通过在变量赋值的任何部分添加额外的括号来引起它们.
let g = (5) //becomes type (Int)
Run Code Online (Sandbox Code Playgroud)
你甚至可以在类型中引起额外的括号!
let h = ((5)) //becomes type ((Int))
let k = (((5))) //becomes type (((Int)))
//etc.
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:这些括号类型(Int)和类型之间有什么区别Int?
从http://c-faq.com/style/strcmp.html,我学到了以下便利宏:
#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么在这个宏中使用了这么多括号.每个括号是用于某个目的还是使用冗余括号的宏,这些括号没有用处?
我们可以删除周围的括号s1并s2像这样制作一个宏吗?
#define MyStreq(s1, s2) (strcmp(s1, s2) == 0)
Run Code Online (Sandbox Code Playgroud)
这个MyStreq宏似乎对我很有用Streq.
#include <string.h>
#include <stdio.h>
#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)
#define MyStreq(s1, s2) (strcmp(s1, s2) == 0)
int main()
{
printf("%d %d\n", Streq("foo", "foo"), MyStreq("foo", "foo"));
printf("%d %d\n", Streq("fox", "foo"), MyStreq("fox", "foo"));
printf("%d %d\n", Streq("foo", "fox"), MyStreq("foo", "fox"));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面代码的输出:
1 1
0 0
0 0
Run Code Online (Sandbox Code Playgroud)
你能想象这些宏的使用在哪里Streq可以实现人们所期望的但却 …
我最近遇到的代码看起来像这样:
void function(int a, int b, int c){
//...
}
int main(){
//...
(function)(1,2,3);
//...
}
Run Code Online (Sandbox Code Playgroud)
在parens中单独包装函数名称有什么意义?
它有什么不同的影响function(1,2,3);吗?
为什么语言允许这样的语法?
为什么会这样,文档备份在哪里呢?
我的老师坚持认为"z =(y ++)"应首先执行y ++,然后将结果归因于z.
像这样:
int z, y = 10;
z = (y++);
printf("%d", z); //z = 10 or 11? and why?
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正忙着用JavaScript解决这个问题
您将获得一个字符串s,其中包含英文字母,标点符号,空格字符和括号.保证s中的括号形成常规括号序列.
你的任务是从最里面的一个开始,反转每对匹配括号中的字符串.
例
对于字符串"s = a(bc)de",输出应为
reverseParentheses(s)="acbde".
输入输出
[时间限制] 4000ms(js)[输入]字符串s
由英文字母,标点符号,空格字符和括号组成的字符串.保证括号形成常规括号序列.
约束:
5≤x.length≤55.
[输出]字符串
它必须使用以下输入:
嗨,我正在尝试打印以下括号模式的索引:
((((((...)))(((...))))))
Run Code Online (Sandbox Code Playgroud)
如下:
0 23
1 22
2 21
3 11
4 10
5 9
12 20
13 19
14 18
Run Code Online (Sandbox Code Playgroud)
我尝试使用下面给出的此perl代码来实现此目的:
#!/usr/bin/perl
use strict;
use warnings;
my $string = '((((((...)))(((...))))))';
my @myarray = split('', $string);
my @stack;
my @stack1;
while (my ($index, $element) = each(@myarray))
{
if ($element eq '(')
{
push(@stack, $index);
}
if ($element eq ')')
{
push(@stack1, $index);
}
}
print "$stack[$_]-$stack1[$_]\n" for (0 .. $#stack);
Run Code Online (Sandbox Code Playgroud)
但是上面的代码给了我以下输出,这不是必需的输出:
0-9
1-10
2-11
3-18
4-19
5-20
12-21
13-22
14-23 …Run Code Online (Sandbox Code Playgroud)