C# 如何从字符串返回算术运算符
我有一个字符串的形式是C# 如何从字符串返回算术运算符,c#,string,C#,String,我有一个字符串的形式是(1553446+1553448)。操作员可以是+、-、*或/。我只需要以最有效的方式(使用C代码)从这样的字符串中检索运算符 数据不是XML的一种形式(尽管它可能看起来像)。我把绳子作为一个整体 字符串的其他示例 (1545646*1521248) (1345346/15212) 提前感谢。您有两个选项可以获取元素值: 使用正则表达式。 使用或: 什么对你有效 执行时间快,但代码繁琐 快速实施且易于阅读 根据这一点,您可以使用索引、String::IndexOf()或
(1553446+1553448)
。操作员可以是+
、-
、*
或/
。我只需要以最有效的方式(使用C代码)从这样的字符串中检索运算符
数据不是XML的一种形式(尽管它可能看起来像)。我把绳子作为一个整体
字符串的其他示例
(1545646*1521248)
(1345346/15212)
提前感谢。您有两个选项可以获取元素值: 使用正则表达式。
使用或: 什么对你有效
- 执行时间快,但代码繁琐李>
- 快速实施且易于阅读
String::IndexOf()
或XDocument
。他们处于对立的两极,但都有优点和缺点
编辑:
好的,我知道你已经评论了很多,我提出了一个非常丑陋的解决方案,我永远不会使用。但据我所知,这是你想要的
不要投反对票,这是故意的丑陋代码:)
比如说,要分析的字符串是str
。下面的代码将告诉您4个操作数中的哪一个在字符串中,但绝对不会进行其他测试。这段代码可能会带来很多麻烦,但是。。。给你:
class ...
{
private static readonly char[] OPERATORS = new char[] { '+', '-', '*', '/' };
public char GetOperator(string str) // may be static
{
int i;
i = str.Replace("</", "").IndexOfAny(OPERATORS);
return i == -1 ? '_' : OPERATORS[i];
}
}
类。。。
{
私有静态只读字符[]运算符=新字符[]{'+','-','*','/'};
public char GetOperator(string str)//可能是静态的
{
int i;
i=str.Replace(“我已经使用Regex
提取+
-
/
*
和数字
。获取元素后,可以根据需要使用它
string a = "<op>(</op><num>1553446</num><op>+</op>
<num>1553448</num><op>)</op>";
Regex reg = new Regex(@"<op>[\+\-\*\/]?</op>");
MatchCollection matches = reg.Matches(a);
foreach (Match match in matches)
Console.WriteLine(" " + match.Value); //output <op>+</op>
reg = new Regex(@"<num>\d*</num>");
matches = reg.Matches(a);
foreach (Match match in matches)
Console.WriteLine(" " + match.Value);
//output <num>1553446</num> <num>1553448</num>
Console.ReadKey();
string a=“(1553446+
1553448)";
正则表达式reg=新正则表达式(@“[\+\-\*\/]”);
MatchCollection matches=注册匹配项(a);
foreach(匹配中的匹配)
Console.WriteLine(“+match.Value);//输出+
reg=新的正则表达式(@“\d*”);
匹配项=注册匹配项(a);
foreach(匹配中的匹配)
Console.WriteLine(“+match.Value”);
//输出1553446 1553448
Console.ReadKey();
研究正则表达式……如果这是XML,你不是真的在尝试提取任何op
元素的内容吗?我还建议你首先关注正确和简单的代码,然后定义性能要求,看看你是否能用简单的代码满足它们。尝试直接获取最高效的代码“可能”几乎从来都不是一个好主意。这些数据不是来自XMLSo,使用正则表达式将是一个不错的选择…但不知道如何使用…所以需要帮助!!但是如果在开始/结束处添加一个打开/关闭的根元素,它是否始终是有效的XML?特别是,您的示例显示了(
和)
作为
元素的内容…是否会有一个我不会使用它们中的任何一个-我只需要将文档加载到XDocument
中,然后直接从那里开始。两行代码…@JonSkeet当然,你是对的。注意,字符串目前不是非常有效的XML-你需要类似“+str+”的东西“
-此时您需要将其作为XElement
而不是XDocument
加载,或者使用xmlobj.Root.Elements(“op”)
@anatoligabuza您的解决方案将为我提供操作符(
和)
这也是我不需要的。此外,正如@JonSkeet所说,字符串的XML格式不完全有效。执行速度快,但很麻烦code@user1603970:您定义了性能要求了吗?如果您还没有任何代码工作,那么当简单的代码可以很好地执行时,您如何知道您需要最快的代码你够了吗?@JonSkeet我身上没有任何代码……如果简单的代码可以正常工作,那么我就可以走了。代码不必太麻烦。
string a = "<op>(</op><num>1553446</num><op>+</op>
<num>1553448</num><op>)</op>";
Regex reg = new Regex(@"<op>[\+\-\*\/]?</op>");
MatchCollection matches = reg.Matches(a);
foreach (Match match in matches)
Console.WriteLine(" " + match.Value); //output <op>+</op>
reg = new Regex(@"<num>\d*</num>");
matches = reg.Matches(a);
foreach (Match match in matches)
Console.WriteLine(" " + match.Value);
//output <num>1553446</num> <num>1553448</num>
Console.ReadKey();