在我的代码中用 [] 替换 .at()

发布于 2024-11-27 04:32:08 字数 199 浏览 0 评论 0原文

我是一名 C++ 用户,并获得了一些使用 .at() 来对 STL 向量进行绑定检查的代码。现在我想将它们更改为标准 []。有谁知道可以执行此操作的脚本吗?它不一定是一个超级通用的脚本 - 大多数情况是 .at(i).at(a*i+j) - 但也有其中太多了,无法手工完成。

I'm a C++ user and got some code that uses .at() to get bound checking on the STL vectors. Now I'd like to change them to standard []. Does anyone know of a script that could do this? It doesn't have to be a super general script — most of the cases are .at(i) or perhaps .at(a*i+j) — but there are too many of them to do by hand.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

喵星人汪星人 2024-12-04 04:32:08

使用此 Perl 运算符:

s/\.at\(([^)]+)\)/[$1]/g

Perl 中的 s/// 运算符是“替代”(查找/替换)。在第一组 // 中,您指定要匹配的正则表达式。第二个 // 是要替换或替代匹配项的文本。

在这种情况下,我找到“.at(anything-but-a-close-paren)”的任何实例,并将其替换为“[what-was-in-those-parens]”。

简而言之,

perl -pe's/\.at\(([^)]+)\)/[$1]/g' in.cpp > out.cpp

如果您使用 Visual Studio,请在查找/替换提示中执行以下操作:

查找内容:\.at\({[^)]+}\)
替换为:\[\1\]

启用正则表达式就可以了。

Use this Perl operator:

s/\.at\(([^)]+)\)/[$1]/g

The s/// operator in Perl is a "substitute" (find/replace). In the first set of //, you specify the regular expression to match. The second // is the text to replace or substitute that match with.

In this case, I'm finding any instance of ".at(anything-but-a-close-paren)" and replace it with "[what-was-in-those-parens]".

As a one-liner,

perl -pe's/\.at\(([^)]+)\)/[$1]/g' in.cpp > out.cpp

If you use Visual Studio, do this in the Find/Replace prompt:

Find What: \.at\({[^)]+}\)
Replace with: \[\1\]

Enable Regular Expressions and you're good to go.

浅暮の光 2024-12-04 04:32:08
sed -i 's,\.at(\([^\)]*\)),[\1],g' *.h *.cpp

应该适用于大多数简单的表达式。但是,如果在 at() 的参数内使用括号,则这将不起作用。

grep 'at(.*).*)' *.h *.cpp

帮助您识别这些情况并运行所述 sed 脚本之前转换它们。

PS 如果您让 sed 像这里一样就地操作,请保留备份(例如通过 VCS)。

编辑:应该在发布之前测试该 sed 脚本。现已修复并测试。

sed -i 's,\.at(\([^\)]*\)),[\1],g' *.h *.cpp

should work for most simple expressions. However, if you use parentheses inside the parameter to at(), this will not work.

grep 'at(.*).*)' *.h *.cpp

helps you to identify these cases and convert them before running said sed script.

P.S. Keep a backup around (e.g. via a VCS) if you let sed operate in-place like here.

EDIT: Should have tested that sed script before posting. Fixed now, and tested.

浮华 2024-12-04 04:32:08
sed -e 's/\.at(\([^)]*\))/\[\1]/g
sed -e 's/\.at(\([^)]*\))/\[\1]/g
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文