在特定字符之前插入字符 c#

3
假设下面的字符串是在C#中,如何替换其中的内容:
y=x^7+3x^4-x+5

使用

y=0^7+3*0^4-0+5

由于不能简单地将所有 x 的实例替换为 0,否则您会得到 30^4

这是一个数学表达式。最简单的方法是在运行时使用CodeDom编译字符串。即使这样做也无法工作,因为0和x之间没有符号,所以要实现这样的算法并不容易。 - M.kazem Akhgary
不,这并不适用于所有可能的表达式。之前我创建了一个理解和计算数学表达式的项目。通用算法大约有1500行代码来处理所有可能的表达式。但是CodeDom更容易,将我的整个项目缩减为500行代码。但仍然太多了! - M.kazem Akhgary
你可以先将"x"替换为"*x",然后再将"x"替换为"0",最后在开头插入"1"。这样你应该得到y = 1*0^7+3*0^4+5 - Malte R
我怀疑Malte R的答案是否适用于所有情况(我并没有真正理解它的假设)。我会通过将隐式运算符替换为“”来规范化初始表达式:当表达式“x”的所有字符在数字之前时,必须将其替换为“x”(可以使用函数char.IsDigit())。 - Graffito
是的,将 x 替换为 *x 的答案在使用其他运算符时会失败,我只是试图捕获错误,以防用户输入隐含的运算符,我个人使用 * 表示乘法,但其他人可能不这样做。 - Spartan
显示剩余3条评论
2个回答

3
var a = "y=x^7+3x^4-x+5";
var b = Regex.Replace(a, @"(\d+|[a-zA-Z])(?=\d+|[a-zA-Z])", @"$1*");
var c = Regex.Replace(b, @"x", @"0");

第二行概述:匹配任何数字或变量,后面跟随任何数字或变量。

输出示例:

In: y=33xggyz/3/4*x/x+xx1         |  In: y=x^7+3x^4-x+5        
Out:y=33*x*g*g*y*z/3/4*x/x+x*x*1  |  Out:y=0^7+3*0^4-0+5              
                                  |
In: y=2+33xggyz/3/4*x/x+xx        |  In: y=x1
Out:y=2+33*0*g*g*y*z/3/4*0/0+0*0  |  Out:y=0*1
                                  |
In: y=10xy^2+xx+(12x+1yy)         |  In: y(xx)=1
Out:y=10*0*y^2+0*0+(12*0+1*y*y)   |  Out:y(0*0)=1

更新:(2015年7月4日)修复了错误,y=x1时失败(返回y=01)


更新:经过进一步的测试,我意识到该函数在y=x0时失败。已进行更正。 - SunsetQuest

0
在这种用户案例中,您只想要更改。
y=x^7+3x^4-x+5

y=0^7+3*0^4-0+5

希望简单地添加另一个变量。

int x = //Whatever x is going to be;
int j = 0;
int y = j^7+3x^4-j+5

现在,如果您有比这更多的用户案例,您可能会非常快速地添加大量变量,在这种情况下,您将不想使用此选项。但是,如果您仅用于独立的情况,那么这可能是一个可行的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接