我正在用C++编写一个程序,我应该从用户那里接收一个字符串而不在屏幕上显示它(例如:apassword).我尝试使用cin和gets接受字符串.但两者都会回显用户在控制台中输入的字符.
那么在C++中有没有任何函数或任何其他方法呢?
以下代码
#include <cassert>
#include <cstddef>
template <typename T>
struct foo {
foo(std::nullptr_t) { }
//friend bool operator ==(foo lhs, foo rhs) { return true; }
template <typename U>
friend bool operator ==(foo<U> lhs, foo<U> rhs);
};
template <typename T>
inline bool operator ==(foo<T> lhs, foo<T> rhs) { return true; }
int main() {
foo<int> p = nullptr;
assert(p == nullptr);
}
Run Code Online (Sandbox Code Playgroud)
无法使用错误消息进行编译
foo.cpp:18:5:错误:
operator=='p == nullptr'
in''foo.cpp 不匹配:18:5:注意:候选人是:
foo.cpp:14:13:注意:template<class T> bool operator==(foo<T>, foo<T>)
foo.cpp:14:13:注意:模板参数推导/替换失败:
foo.cpp:18:5:注意:不匹配的类型'foo<T> …
我尝试let使用以下语义实现一个函数:
> let(x = 1, y = 2, x + y)
[1] 3
Run Code Online (Sandbox Code Playgroud)
...在概念上有点类似于substitute语法with.
以下代码几乎可以工作(例如上面的调用工作):
let <- function (...) {
args <- match.call(expand.dots = FALSE)$`...`
expr <- args[[length(args)]]
eval(expr,
list2env(lapply(args[-length(args)], eval), parent = parent.frame()))
}
Run Code Online (Sandbox Code Playgroud)
注意嵌套eval,外部用于评估实际表达式,而inner用于评估参数.
不幸的是,后一种评估发生在错误的背景下.当尝试let使用检查当前帧的函数调用时,这变得很明显,例如match.call:
> (function () let(x = match.call(), x))()
Error in match.call() :
unable to find a closure from within which 'match.call' was called
Run Code Online (Sandbox Code Playgroud)
我想过提供父框架作为评估环境eval,但这不起作用:
let <- function (...) {
args …Run Code Online (Sandbox Code Playgroud) 下面的代码在R(3.0.2中执行但是我假设它与其他版本类似)时可重现的段错误:
ns = new.env(parent = .BaseNamespaceEnv)
local(f <- function () 42, envir = ns)
x = list2env(as.list(ns), parent = as.environment(2))
parent.env(.GlobalEnv) = x
detach()
Run Code Online (Sandbox Code Playgroud)
是的,我知道文件parent.env说的
替换功能
parent.env<-非常危险,因为它可以用于以违反内部C代码假设的方式破坏性地改变环境.它可能会在不久的将来被删除.
这就是我似乎遇到的问题.但是,我想了解为什么这种行为是这样的,以及如何避免它.
以下简化代码并不会有这样的问题:
x = new.env(parent = as.environment(2))
local(f <- function () 42, envir = x)
parent.env(.GlobalEnv) = x
detach()
Run Code Online (Sandbox Code Playgroud)
...所以它似乎有所不同,它x包含parent.env一个不同(未连接)环境的函数.
同样,使用attach而parent.env<-不是导致崩溃.(那么为什么不简单地使用attach?因为在我的代码中,.GlobalEnv部分是一个可能引用不同环境的变量.)
崩溃转储告诉我段错误发生在do_detach(envir.c)中.该代码包含以下行:
isSpecial = IS_USER_DATABASE(s);
if(isSpecial) { …Run Code Online (Sandbox Code Playgroud) 首先让我说我已经阅读了关于这个主题的大部分SO和其他主题.
我理解的方式,std :: vector 将在推回新项目时重新分配内存,这是我的情况,除非我保留了足够的空间(这不是我的情况).
我所拥有的是std :: shared_ptr的向量,并且该向量包含唯一对象(或者更准确地说,指向向量中的唯一对象).
通过指针处理这些对象是围绕Factory&Handler类进行的,但是可以从包装类外部访问指向对象的指针,并且可以修改成员值.任何时候都不会发生删除.
如果我正确理解先前关于std :: vector和线程安全的SO问题中提出的问题,添加(push_back)新对象可能会使先前的指针无效,因为向量内部可能会重新分配内存并复制所有内容,这当然是一场灾难为了我.
我的意图是从该向量读取,通常通过指针修改对象,并从异步运行的线程向向量添加新项.
所以,
如果它具有任何重要性,那么以上所有内容都是在linux(debian jessie)上使用gcc-4.8并启用了c ++ 11.
我愿意使用微创库.
提前谢谢了 :-)
使用函数stringdist,我可以计算字符串之间的Levenshtein距离:它计算将字符串转换为另一个字符串所需的删除,插入和替换的次数。例如,stringdist("abc abc","abcd abc") = 1因为在第二个字符串中插入了“ d”。
是否有可能知道为获取两个琴弦之间的Levenshtein距离而进行的操作?还是要知道两个字符串之间不同的字符(在此示例中,只有“ d”)?谢谢。
library(stringdist)
stringdist("abc abc","abcde acc") = 3
Run Code Online (Sandbox Code Playgroud)
我想知道:
插入了“ d”
插入了“ e”
“ b”被替换为“ c”
或更简单地说,我想要列表(“ d”,“ e”,“ c”)。
将以下自然语言表达式转换为 C++ 表达式。假设所有变量都是非负数或布尔值(值为真或假)。
a 和 b 都为假或 c 为真,但不能同时为真。
(a==0 && b==0)xor(c==1)
Run Code Online (Sandbox Code Playgroud)
(!a && !b) != c
Run Code Online (Sandbox Code Playgroud)
我想我稍微理解了第一个括号,通过说“not-a”和“not-b”,我认为 a 和 b 一定是错误的,前提是 ab 在开始时被假定为非零。对?
但是说“不等于c”的部分呢?
我不明白教授的解决方案,谁能帮我分解一下?
感谢您的帮助!
我正在尝试逐行读取以下文件并检查文件中是否存在值。我目前正在尝试的方法不起作用。我究竟做错了什么?
如果该值存在,我什么都不做。如果没有,那么我将它写入文件。
文件.txt:
123
345
234
556
654
654
Run Code Online (Sandbox Code Playgroud)
代码:
file = open("file.txt", "a+")
lines = file.readlines()
value = '345'
if value in lines:
print('val ready exists in file')
else:
# write to file
file.write(value)
Run Code Online (Sandbox Code Playgroud) 我想在 python 中输入注释一个只接受单个字符的函数,例如:\n(s: str) -> int
由于 Python 没有单个字符的类型,因此您不能只执行类似(s: char) -> int.
有没有一种方法可以让键入的内容s: str只能是一个字符?
我发现这对于编写代码时的提示很有用。
\n这是我的完整示例:
\nimport unicodedata\n\nroman_numeral_lookup = {"I": 1, "V": 5, "X": 10, ...}\n\ndef exact_roman_numeral(s: str) -> int:\n """Return the value of a single Roman numeral. Dosen\'t support multicharacter roman numerals such as \'XII\' or Apostrophus."""\n\n # Convert Unicode Roman numerals into to their normalised text version. e.g. \xe2\x85\xa9 -> X, \xe2\x85\xb0 -> I\n s = unicodedata.normalize("NFKC", s).upper()\n\n …Run Code Online (Sandbox Code Playgroud) 我们已经使用 FastAPI 创建了一个服务。当我们的服务启动时,它会创建一些 Python 对象,然后端点使用这些对象来存储或检索数据。
生产中的 FastAPI 从多个工人开始。我们的问题是每个工人创建自己的对象而不是共享一个。
下面的脚本显示了我们正在做的(简化的)示例,尽管在我们的例子中 Meta() 的使用要复杂得多。
from fastapi import FastAPI, status
class Meta:
def __init__(self):
self.count = 0
app = FastAPI()
meta = Meta()
# increases the count variable in the meta object by 1
@app.get("/increment")
async def increment():
meta.count += 1
return status.HTTP_200_OK
# returns a json containing the current count from the meta object
@app.get("/report")
async def report():
return {'count':meta.count}
# resets the count in the meta object to 0
@app.get("/reset") …Run Code Online (Sandbox Code Playgroud) c++ ×4
python ×3
r ×3
c++11 ×2
asynchronous ×1
environment ×1
eval ×1
fastapi ×1
logic ×1
python-3.7 ×1
python-3.x ×1
string ×1
stringdist ×1
substitution ×1
templates ×1
vector ×1