我正在尝试编写一个正则表达式函数,该函数将识别并替换字符串中匹配的单个实例,而不会影响其他实例.例如,我有这个字符串:
12||34||56
Run Code Online (Sandbox Code Playgroud)
我想用&符号替换第二组管道来获取此字符串:
12||34&&56
Run Code Online (Sandbox Code Playgroud)
正则表达式的功能需要能够处理管道的X量,让我来代替第n个集管,所以我可以使用相同的功能,使这些替代品:
23||45||45||56||67 -> 23&&45||45||56||67
23||34||98||87 -> 23||34||98&&87
Run Code Online (Sandbox Code Playgroud)
我知道,我可以只拆分/替换/ CONCAT字符串在管,我也知道,我可以匹配/\|\|/,并通过生成的数组迭代,但我想知道如果有可能写一个表达式,可以做这个.请注意,这将是JavaScript,因此有可能产生在运行时使用正则表达式eval(),但它不可能使用任何Perl的正则表达式的具体说明.
是否可以使用Fossil重命名目录?我试过了明显的命令:
fossil mv oldname newname
Run Code Online (Sandbox Code Playgroud)
Fossil然后告诉我它做了一些事情:
RENAME oldname newname
Run Code Online (Sandbox Code Playgroud)
然而,称"化石变化"导致空列表.据我所知,重命名目录要么不受支持,要么尚未实现或只是被破坏.这有诀窍吗?
如果替代函数名称使API更明显,放弃getter和setter的"getMyValue()"和"setMyValue()"模式是否合适?
例如,假设我在C++中有这个类:
public class SomeClass {
private:
bool mIsVisible;
public:
void draw();
void erase();
}
Run Code Online (Sandbox Code Playgroud)
我可以添加函数来获取/设置"mIsVisible",如下所示:
bool getVisible() { return mIsVisible; };
void setVisible(bool visible) {
if (!mIsVisible && visible) {
draw();
} else if (mIsVisible && !visible) {
erase();
}
mIsVisible = visible;
Run Code Online (Sandbox Code Playgroud)
}
Run Code Online (Sandbox Code Playgroud)
但是,同样可以使用以下方法:
bool isVisible() { return mIsVisible; };
void show() {
if (!mIsVisible) {
mIsVisible = true;
draw();
}
}
void hide() {
if (mIsVisible) {
mIsVisible = false;
erase();
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,有一个"setVisible(bool)"方法,还是一对"show()"和"hide()"方法更好?有会议,还是纯粹主观的?
据我了解,当被要求保留更大的内存块时,realloc()函数将执行以下三种不同的操作之一:
if free contiguous block exists
grow current block
else if sufficient memory
allocate new memory
copy old memory to new
free old memory
else
return null
增长当前块是一个非常便宜的操作,所以这是我想利用的行为.但是,如果我正在重新分配内存,因为我想(例如)在现有字符串的开头插入一个char,我不希望realloc()复制内存.我最终会用realloc()复制整个字符串,然后再次手动复制它以释放第一个数组元素.
是否可以确定realloc()将执行哪些操作?如果是这样,是否有可能以跨平台的方式实现?
在调试late-out-of-bound-recursive-function之前:是否有一个获取子目录的命令?giveMeSubDirs(downToPath)?
// WARNING: RECURSION out of bound or too much data
public HashSet<FileObject> getAllDirs(String path) {
HashSet<FileObject> checkedDirs = new HashSet<FileObject>();
HashSet<FileObject> allDirs = new HashSet<FileObject>();
String startingPath = path;
File fileThing = new File(path);
FileObject fileObject = new FileObject(fileThing);
for (FileObject dir : getDirsInDir(path)) {
// SUBDIR
while ( !checkedDirs.contains(dir)
&& !(getDirsInDir(dir.getFile().getParent()).size() == 0)) {
// DO NOT CHECK TOP DIRS if any bottom dir UNCHECKED!
while ( uncheckedDirsOnLevel(path, checkedDirs).size() > 0) {
while (getDirsInDir(path).size() == 0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试解压缩一个最初使用AMOS Pro扩展压缩的数据文件,这是AMOS Pro编译器附带的旧Amiga BASIC语言.我仍然使用编程语言并可以访问压缩器和解压缩程序,但我正在尝试使用C解压缩文件.我最终希望能够在现代硬件上查看这些文件而无需使用Amiga首先是模拟器.
然而,没有关于压缩器如何工作的文档,所以我试图仅仅通过观察其行为来对其进行逆向工程.这是我到目前为止所得到的.
这是一个原始文件(ASCII):
AABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZ
Run Code Online (Sandbox Code Playgroud)
这是压缩版本(十六进制):
D802C6B5
05048584
4544C5C4
2524A5A4
6564E5E4
15149594
5554D5D4
3534B591
00000007
AD763363
00000051
Run Code Online (Sandbox Code Playgroud)
使用各种文件进行测试给了我一些见解:
前4个字节似乎代表序列长度.在上面的例子中,值0xD8是11011000二进制的; 镜像它(位是反向的)你得到的00011011,0x1B十六进制或十进制的27.这匹配序列长度.
但是,我没有取得任何进展.这看起来像标准压缩算法吗?接下来我该尝试什么?
algorithm ×1
amiga ×1
binary ×1
c ×1
c++ ×1
coding-style ×1
compression ×1
dvcs ×1
filesystems ×1
fossil ×1
getter ×1
java ×1
javascript ×1
recursion ×1
regex ×1
setter ×1
subdirectory ×1