gpt4 book ai didi

c#-4.0 - C# IsBetween 字符串逻辑

转载 作者:行者123 更新时间:2023-12-04 06:03:28 24 4
gpt4 key购买 nike

寻找解决方案、一些想法或指出如何解决问题的正确方向。

基本上,我必须弄清楚字符串值是否介于低字符串值和高字符串值之间。但是,这些值的格式是 String.Compare 不起作用的。但是,人类可以很容易地弄清楚。

例如,我的范围之一是低:A7,高 A12。 A8 介于这些值之间,但 String.Compare 表示它不适合。 A13 不适合这些值。

低值和高值的其他示例是:

低值(value) - 高值(value)

1A1 - 1A12

25W00 - 25W050

42W1 - 42W296

W232N0002 - W232N000598

在上面的示例中,1A2 将适合 1A1 和 1A12 的低高值之间,但 1A100 不会。

关于如何解决这个问题的任何想法?我知道以前一定遇到过这种情况。

最佳答案

这可以使用一些优化,但这是一个概念证明。
只需将字母转换为数值并比较结果:

private bool ValueIsBetween(string value, string lowValue, string highValue)
{
long low = long.Parse(ConvertToNumber(lowValue));
long high = long.Parse(ConvertToNumber(highValue));
long val = long.Parse(ConvertToNumber(value));
return val > low && val < high;
}

private string ConvertToNumber(string value)
{
value = value.ToUpper();
value = value.Replace("A", "0");
value = value.Replace("B", "1");
value = value.Replace("C", "2");
value = value.Replace("D", "3");
value = value.Replace("E", "4");
value = value.Replace("F", "5");
value = value.Replace("G", "6");
value = value.Replace("H", "7");
value = value.Replace("I", "8");
value = value.Replace("J", "9");
value = value.Replace("K", "10");
value = value.Replace("L", "11");
value = value.Replace("M", "12");
value = value.Replace("N", "13");
value = value.Replace("O", "14");
value = value.Replace("P", "15");
value = value.Replace("Q", "16");
value = value.Replace("R", "17");
value = value.Replace("S", "18");
value = value.Replace("T", "19");
value = value.Replace("U", "20");
value = value.Replace("V", "21");
value = value.Replace("W", "22");
value = value.Replace("X", "23");
value = value.Replace("Y", "24");
value = value.Replace("Z", "25");

return value;
}

结果:
ValueIsBetween("1A2", "1A1", "1A12");

真的
ValueIsBetween("1A100", "1A1", "1A12");

错误的
ValueIsBetween("43W4", "42W1", "44W3");

真的

编辑:
试试这个改进的算法:
private bool ValueIsBetween(string value, string lowValue, string highValue)
{
return !ValueIsLessThan(value, lowValue) && ValueIsLessThan(value, highValue);
}

private bool ValueIsLessThan(string value, string compareTo)
{
var matches = Regex.Matches(value, "[0-9]+|[a-zA-Z]+");
var matchesB = Regex.Matches(compareTo, "[0-9]+|[a-zA-Z]+");

var count = matches.Count < matchesB.Count ? matches.Count : matchesB.Count;

for (int i = 0; i < count; i++)
{
long val;
long val2;
if (long.TryParse(matches[i].Value, out val))
{
if (long.TryParse(matchesB[i].Value, out val2))
{
if (val > val2) return false;
if (val < val2) return true;
}
else
{
return false;
}
}
else
{
if (matches[i].Value.CompareTo(matchesB[i].Value) > 0 ) return false;
if (matches[i].Value.CompareTo(matchesB[i].Value) < 0 ) return true;
}
}

return true;
}

结果:
ValueIsBetween("B431Z543", "A0", "Z9");

真的
ValueIsBetween("4B31Z543", "A0", "Z9");

错误的
ValueIsBetween("1A2", "1A1", "1A12");

真的
ValueIsBetween("1A100", "1A1", "1A12");

错误的
ValueIsBetween("43W4", "42W1", "44W3");

真的
ValueIsBetween("W5", "CC4", "CC6");

错误的
ValueIsBetween("W8B4", "W5C3", "W7C3");

错误的
ValueIsBetween("W5C4", "W5C3", "C7W3"); 

错误的

关于c#-4.0 - C# IsBetween 字符串逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com