Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c以大写字母切割字符串_C#_String - Fatal编程技术网

C# c以大写字母切割字符串

C# c以大写字母切割字符串,c#,string,C#,String,我想做一个小程序,在这个程序中,每个原子的原子质量都有很多倍。我想把一个分子式写进一个文本框,然后程序应该能够计算摩尔质量,但是,我不知道如何从文本框中剪切字符串,例如,我可以通过在文本框中插入NaCl得到,Na double的值加上Cl double的值 namespace WindowsFormsApplication33 { public partial class Form1 : Form { double H = 1.00794; dou

我想做一个小程序,在这个程序中,每个原子的原子质量都有很多倍。我想把一个分子式写进一个文本框,然后程序应该能够计算摩尔质量,但是,我不知道如何从文本框中剪切字符串,例如,我可以通过在文本框中插入NaCl得到,Na double的值加上Cl double的值

namespace WindowsFormsApplication33
{
    public partial class Form1 : Form
    {
        double H = 1.00794;
        double He = 4.002602;
        double Li = 6.941;
        double Be = 9.012182;
        ...
这些都是我的替身,现在我想要一个按钮:

        private void button1_Click(object sender, EventArgs e)
        {
            //take the different atoms in the molecule formula from a textbox,
            //get the value of all those doubles, and add them all together to get
            //a final value, for instance: NaCl = Na + Cl = 22.98976928 + 35.453 = 58.44276928
        }
另外,我想能够写出H2SO4,它本质上是H*2+S+O*4,我该怎么做呢


提前感谢您

向我们展示您所做的尝试。我们将祝福您继续制作此节目。如果你陷入困境,请随时提出一个关于某个特定问题的问题,并附上你所尝试和研究的内容。对不起,我不是最擅长解释的人,我经常会使用很多特殊的语言,我希望这个编辑有助于理解我的问题,我想要两个不同的字符串,这样我就可以从double中提取一个名称相当于字符串文本的值。尝试返回Regex.Splitsource,@?好的,我用它来做我想做的事情,你有什么方法可以帮我计算像H2SO4这样的东西,本质上是H*2+S+O*4吗?我已经编辑了我的帖子,以符合你上面的要求。希望这对你有帮助。当使用密钥对值数据(如化学值)时,使用字典要好得多谢谢你,你几乎为我制作了整个程序,我唯一要改变的是对if语句中的其他部分进行尝试捕捉,因为如果有人输入H2SO0,那么它实际上就是H*2+S+O*0,这会造成错误。是的,我也不会为你做验证。当心,别忘了标记为完整。谢谢你,非常好,实际上我把我所有的替身都放进了字典,就像掉下来时建议的那样,但代码基本相同,你能帮我问他些什么吗?
void Main()
{
    string text = "NiNaCiKi";
    Regex reg = new Regex("[A-Z]{1}[a-z]*");
    var props = reg.Matches(text).Cast<Match>().Select(m=>m.Value).ToList();

    Chem ch = new Chem();

    var sum = typeof(Chem)
    .GetProperties()
    .Where(p=>props.Contains(p.Name))
    .Cast<PropertyInfo>()
    .Select(val=> (double)val.GetValue(ch)).Sum();

    Console.WriteLine(sum);
}

public class Chem
{
    public double Na {get {return 4;}}
    public double N {get {return 2;}}
    public double Ci {get {return 1;}}
}
Dictionary<string, double> Chemicals = new Dictionary<string, double>() { { "H", 1.00794 }, { "He", 4.002602 }, { "Li", 6.941 }, { "Be", 9.012182 } };
        List<string> Properties = new List<string>();

        Regex reg = new Regex("[A-Z]{1}[a-z0-9]*");
        Properties = reg.Matches(txtInput.Text).Cast<Match>().Select(m => m.Value).ToList();

        double Total = 0;
        foreach (var Property in Properties)
        {
            var result = Regex.Match(Property, @"\d+$").Value;

            int resultAsInt;
            int.TryParse(result, out resultAsInt);

            if (resultAsInt > 0)
            {
                Total += Chemicals[Property.Substring(0, Property.Length - result.Length)] * resultAsInt;
            }
            else
            {
                Total += Chemicals[Property];
            }

        }

        lblOutput.Text = "Total: " + Total.ToString();