我有以下函数来识别空符号,哪里ns 应该代表空符号。
#include"k.h"
K test (K x) {
K ns = ks("");
if (abs(x->t) != KS) {
R krr("type");
}
if (x->t > 0) {
K res = ktn(KB,x->n);
for (int i=0;i<x->n;++i){
if (kK(x)[i] == ns) {
kG(res)[i] = 1;
}
else {
kG(res)[i] = 0;
}
}
R res;
}
else {
if (x == ns) {
R kb(1);
}
else {
R kb(0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
检查参数x(或kK(x)[i]arg的元素x)的相等性ns并没有按我预期的那样工作。
q)`test set `:test 2: `test,1
`test
q)test ``a`b
000b
// should be 100b
Run Code Online (Sandbox Code Playgroud)
如何正确执行此比较?
小智 5
您最好比较底层的 char 数组而不是整个 K 对象
还记得在完成后删除对 ns 的引用以避免内存泄漏
K test(K x) {
K ns = ks("");
if (abs(x->t) != KS) {
R krr("type");
}
if (x->t > 0) {
K res = ktn(KB, x->n);
for (int i = 0; i<x->n; ++i) {
if (kS(x)[i] == ns->s) {
kG(res)[i] = 1;
}
else {
kG(res)[i] = 0;
}
}
r0(ns);
R res;
}
else {
if (x->s == ns->s) {
r0(ns);
R kb(1);
}
else {
r0(ns);
R kb(0);
}
}
Run Code Online (Sandbox Code Playgroud)