"按字典顺序比较两个字符串"是什么意思?
我正在寻找一种方法来比较字符串和字符串数组.当然,进行精确搜索非常容易,但我希望我的程序能够容忍拼写错误,缺少部分字符串等等.
是否有某种框架可以执行这样的搜索?我有一些想法,搜索算法将返回一些结果顺序的匹配百分比或类似的东西.
为什么用Python "hello" is "hello"生成True?
我在这里阅读以下内容:
如果两个字符串文字相等,则它们被放在相同的内存位置.字符串是不可变的实体.不会造成伤害.
因此,每个Python字符串在内存中只有一个位置?听起来很奇怪.这里发生了什么?
我正在从配置文件中读取加密的凭证/连接字符串.Resharper告诉我,"String.IndexOf(string)在这里是特定于文化的"这一行:
if (line.Contains("host=")) {
_host = line.Substring(line.IndexOf(
"host=") + "host=".Length, line.Length - "host=".Length);
Run Code Online (Sandbox Code Playgroud)
......所以想把它改成:
if (line.Contains("host=")) {
_host = line.Substring(line.IndexOf("host=", System.StringComparison.Ordinal) + "host=".Length, line.Length - "host=".Length);
Run Code Online (Sandbox Code Playgroud)
无论应用程序在何处部署,我正在阅读的值始终为"host =".添加这个"System.StringComparison.Ordinal"位是否真的明智?
更重要的是,它可以伤害任何东西(使用它)吗?
c# resharper cultureinfo configuration-files string-comparison
我需要比较字符串来决定它们是否代表相同的东西.这涉及人类输入的案例标题,其中缩写和其他小细节可能不同.例如,请考虑以下两个标题:
std::string first = "Henry C. Harper v. The Law Offices of Huey & Luey, LLP";
Run Code Online (Sandbox Code Playgroud)
相反:
std::string second = "Harper v. The Law Offices of Huey & Luey, LLP";
Run Code Online (Sandbox Code Playgroud)
人类可以快速判断这些很可能是同一个.我采取的当前方法是通过降低所有字母的小写并删除所有标点和空格来规范化字符串:
std::string firstNormalized = "henrycharpervthelawofficesofhueylueyllp";
Run Code Online (Sandbox Code Playgroud)
和:
std::string secondNormalized = "harpervthelawofficesofhueylueyllp";
Run Code Online (Sandbox Code Playgroud)
在这种情况下比较,一个是另一个的子序列,但是您可以想象其他更复杂的变体,其中不一定会发生,但它们具有共同的重要子序列.也可能偶尔出现人为输入错误,例如转置字母和拼写错误.
也许某种角色差异程序可以帮助?我已经看到用于比较要检入的代码差异的良好行差异程序,在字符的基础上有类似的东西,也许在提升?如果你可以统计连续字符的数量并将比率与未共享的字符进行比较,那么这可能是一个很好的启发式算法?
最后,我需要一个布尔决定,是否将它们视为相同或不相同.它不一定是完美的,但理想情况下应该很少出错.
我可以使用什么算法来给我一些量化关于两个字符串彼此之间的相似程度,然后我可以通过某种启发式转换为是/否答案?
language-agnostic algorithm heuristics stdstring string-comparison
我有两个字符串,我想比较一下:String和String:.是否有一个库函数在传递这两个字符串时会返回true,但是对于say String和OtherString?
确切地说,我想知道一个字符串是否是另一个字符串的前缀.
考虑以下代码片段:
bool foo(const std::string& s) {
return s == "hello"; // comparing against a const char* literal
}
bool bar(const std::string& s) {
return s == "hello"s; // comparing against a std::string literal
}
Run Code Online (Sandbox Code Playgroud)
在乍一看,它看起来像比对并const char*需要更少的组装说明1,作为使用字符串字面量会导致就地建设std::string。
(编辑:正如答案中指出的那样,我忘记了有效地s.compare(const char*)将被调用的事实foo(),因此在这种情况下当然不会进行就地构建。因此,请在下面删除一些行。)
但是,请operator==(const char*, const std::string&)参阅参考资料:
所有比较都是通过
compare()成员函数完成的。
根据我的理解,这意味着我们将需要构造一个结构 std::string来执行比较,因此我怀疑最终的开销将是相同的(尽管对的调用已将其隐藏了operator==)。
1我知道更少的汇编指令并不一定意味着更快的代码,但是我不想在这里进行微基准测试。
我真的不知道为什么下面的if语句没有执行:
if (s == "/quit")
{
System.out.println("quitted");
}
Run Code Online (Sandbox Code Playgroud)
以下是全班.
这可能是一个非常愚蠢的逻辑问题,但我一直在把头发拉到这里,但是无法解决这个问题.
谢谢你看:)
class TextParser extends Thread {
public void run() {
while (true) {
for(int i = 0; i < connectionList.size(); i++) {
try {
System.out.println("reading " + i);
Connection c = connectionList.elementAt(i);
Thread.sleep(200);
System.out.println("reading " + i);
String s = "";
if (c.in.ready() == true) {
s = c.in.readLine();
//System.out.println(i + "> "+ s);
if (s == "/quit") {
System.out.println("quitted");
}
if(! s.equals("")) {
for(int j = 0; j < …Run Code Online (Sandbox Code Playgroud) PostgreSQL有一个简单的忽略大小写比较吗?
我想替换:
SELECT id, user_name
FROM users
WHERE lower(email) IN (lower('adamB@a.com'), lower('eveA@b.com'));
Run Code Online (Sandbox Code Playgroud)
有类似的东西:
SELECT id, user_name
FROM users
WHERE email IGNORE_CASE_IN ('adamB@a.com', 'eveA@b.com');
Run Code Online (Sandbox Code Playgroud)
在like与ilike单值(例如运营商的工作like 'adamB@a.com'),但不是套.
在.NET中,某些字符串不是这样的:
static void CompareBug()
{
string x = "\u002D\u30A2"; // or just "-?" if charset allows
string y = "\u3042"; // or just "?" if charset allows
Console.WriteLine(x.CompareTo(y)); // positive one
Console.WriteLine(y.CompareTo(x)); // positive one
Console.WriteLine(StringComparer.InvariantCulture.Compare(x, y)); // positive one
Console.WriteLine(StringComparer.InvariantCulture.Compare(y, x)); // positive one
var ja = StringComparer.Create(new CultureInfo("ja-JP", false), false);
Console.WriteLine(ja.Compare(x, y)); // positive one
Console.WriteLine(ja.Compare(y, x)); // positive one
}
Run Code Online (Sandbox Code Playgroud)
你看,x它严格地大于y,并且y严格地大于x.
因为 …
c# ×3
.net ×2
c++ ×2
java ×2
algorithm ×1
c++14 ×1
c++17 ×1
cultureinfo ×1
heuristics ×1
identity ×1
if-statement ×1
postgresql ×1
prefix ×1
python ×1
resharper ×1
similarity ×1
sorting ×1
sql ×1
stdstring ×1