c#精确比较输入和字符串

本文关键字:字符串 输入 比较 | 更新日期: 2023-09-27 18:09:19

我有一张元素周期表中大多数元素的列表,按它们在周期表上的位置排列:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Chemistry_Element_Calculator
{
    class Program
    {
        static void Main(string[] args)
        {
            // Declare all numbers
            int electronNumber;
            int protonNumber;
            float neutronNumber;
            int i;
            // Declare all strings
            string elementRequest;
            // Create an list for all elements
            List<string> elementNameList = new List<string>();
            List<string> elementSymbolList = new List<string>();
            // Add all elements to the list
            elementNameList.Add("Hydrogen"); elementSymbolList.Add("H");
            elementNameList.Add("Helium"); elementSymbolList.Add("He");
            elementNameList.Add("Lithium"); elementSymbolList.Add("Li");
            elementNameList.Add("Beryllium"); elementSymbolList.Add("Be");
            elementNameList.Add("Boron"); elementSymbolList.Add("B");
            elementNameList.Add("Carbon"); elementSymbolList.Add("C");
            elementNameList.Add("Nitrogen"); elementSymbolList.Add("N");
            elementNameList.Add("Oxygen"); elementSymbolList.Add("O");
            elementNameList.Add("Fluorine"); elementSymbolList.Add("F");
            elementNameList.Add("Neon"); elementSymbolList.Add("Ne");
            elementNameList.Add("Sodium"); elementSymbolList.Add("Na");
            elementNameList.Add("Magnesium"); elementSymbolList.Add("Mg");
            elementNameList.Add("Aluminium"); elementSymbolList.Add("Al");
            elementNameList.Add("Silicon"); elementSymbolList.Add("Si");
            elementNameList.Add("Phosphorus"); elementSymbolList.Add("P");
            elementNameList.Add("Sulfur"); elementSymbolList.Add("S");
            elementNameList.Add("Chlorine"); elementSymbolList.Add("Cl");
            elementNameList.Add("Argon"); elementSymbolList.Add("Ar");
            elementNameList.Add("Potassium"); elementSymbolList.Add("K");
            elementNameList.Add("Calcium"); elementSymbolList.Add("Ca");
            elementNameList.Add("Scandium"); elementSymbolList.Add("Sc");
            elementNameList.Add("Titanium"); elementSymbolList.Add("Ti");
            elementNameList.Add("Vanadium"); elementSymbolList.Add("V");
            elementNameList.Add("Chromium"); elementSymbolList.Add("Cr");
            elementNameList.Add("Manganese"); elementSymbolList.Add("Mn");
            elementNameList.Add("Iron"); elementSymbolList.Add("Fe");
            elementNameList.Add("Cobalt"); elementSymbolList.Add("Co");
            elementNameList.Add("Nickel"); elementSymbolList.Add("Ni");
            elementNameList.Add("Copper"); elementSymbolList.Add("Cu");
            elementNameList.Add("Zinc"); elementSymbolList.Add("Zn");
            elementNameList.Add("Gallium"); elementSymbolList.Add("Ga");
            elementNameList.Add("Germanium"); elementSymbolList.Add("Ge");
            elementNameList.Add("Arsenic"); elementSymbolList.Add("As");
            elementNameList.Add("Selenium"); elementSymbolList.Add("Se");
            elementNameList.Add("Bromine"); elementSymbolList.Add("Br");
            elementNameList.Add("Krypton"); elementSymbolList.Add("Kr");
            elementNameList.Add("Rubidium"); elementSymbolList.Add("Rb");
            elementNameList.Add("Strontium"); elementSymbolList.Add("Sr");
            elementNameList.Add("Yttrium"); elementSymbolList.Add("Y");
            elementNameList.Add("Zirconium"); elementSymbolList.Add("Zr");
            elementNameList.Add("Niobium"); elementSymbolList.Add("Nb");
            elementNameList.Add("Molybdenum"); elementSymbolList.Add("Mo");
            elementNameList.Add("Technetium"); elementSymbolList.Add("Tc");
            elementNameList.Add("Rubidium"); elementSymbolList.Add("Ru");
            elementNameList.Add("Rhodium"); elementSymbolList.Add("Rh");
            elementNameList.Add("Palladium"); elementSymbolList.Add("Pd");
            elementNameList.Add("Silver"); elementSymbolList.Add("Ag");
            elementNameList.Add("Cadmium"); elementSymbolList.Add("Cd");
            elementNameList.Add("Indium"); elementSymbolList.Add("In");
            elementNameList.Add("Tin"); elementSymbolList.Add("Sn");
            elementNameList.Add("Antimony"); elementSymbolList.Add("Sb");
            elementNameList.Add("Tellurium"); elementSymbolList.Add("Te");
            elementNameList.Add("Iodine"); elementSymbolList.Add("I");
            elementNameList.Add("Xenon"); elementSymbolList.Add("Xe");
            elementNameList.Add("Caesium"); elementSymbolList.Add("Cs");
            elementNameList.Add("Barium"); elementSymbolList.Add("Ba");
            elementNameList.Add("Lanthanum"); elementSymbolList.Add("La");
            elementNameList.Add("Cerium"); elementSymbolList.Add("Ce");
            elementNameList.Add("Praseodynium"); elementSymbolList.Add("Pr");
            elementNameList.Add("Neodymium"); elementSymbolList.Add("Nd");
            elementNameList.Add("Promethium"); elementSymbolList.Add("Pm");
            elementNameList.Add("Samarium"); elementSymbolList.Add("Sm");
            elementNameList.Add("Europium"); elementSymbolList.Add("Eu");
            elementNameList.Add("Gadolinium"); elementSymbolList.Add("Gd");
            elementNameList.Add("Terbium"); elementSymbolList.Add("Tb");
            elementNameList.Add("Dysprosium"); elementSymbolList.Add("Dy");
            elementNameList.Add("Holomium"); elementSymbolList.Add("Ho");
            elementNameList.Add("Erbium"); elementSymbolList.Add("Er");
            elementNameList.Add("Thulium"); elementSymbolList.Add("Tm");
            elementNameList.Add("Ytterbium"); elementSymbolList.Add("Yb");
            elementNameList.Add("Lutenium"); elementSymbolList.Add("Lu");
            elementNameList.Add("Hafnium"); elementSymbolList.Add("Hf");
            elementNameList.Add("Tantalum"); elementSymbolList.Add("Ta");
            elementNameList.Add("Tungsten"); elementSymbolList.Add("W");
            elementNameList.Add("Rhenium"); elementSymbolList.Add("Re");
            elementNameList.Add("Osmium"); elementSymbolList.Add("Os");
            elementNameList.Add("Iridium"); elementSymbolList.Add("Ir");
            elementNameList.Add("Platinum"); elementSymbolList.Add("Pt");
            elementNameList.Add("Gold"); elementSymbolList.Add("Au");
            elementNameList.Add("Mercury"); elementSymbolList.Add("Hg");
            elementNameList.Add("Thallium"); elementSymbolList.Add("Tl");
            elementNameList.Add("Lead"); elementSymbolList.Add("Pb");
            elementNameList.Add("Bismuth"); elementSymbolList.Add("Bi");
            elementNameList.Add("Polonium"); elementSymbolList.Add("Po");
            elementNameList.Add("Astatine"); elementSymbolList.Add("At");
            elementNameList.Add("Radon"); elementSymbolList.Add("Rn");
            elementNameList.Add("Francium"); elementSymbolList.Add("Fr");
            elementNameList.Add("Radium"); elementSymbolList.Add("Ra");
            elementNameList.Add("Actinium"); elementSymbolList.Add("Ac");
            elementNameList.Add("Thorium"); elementSymbolList.Add("Th");
            elementNameList.Add("Palladium"); elementSymbolList.Add("Pa");
            elementNameList.Add("Uranium"); elementSymbolList.Add("U");
            elementNameList.Add("Nepturium"); elementSymbolList.Add("Np");
            elementNameList.Add("Plutonium"); elementSymbolList.Add("Pu");
            elementNameList.Add("Americium"); elementSymbolList.Add("Am");
            elementNameList.Add("Curium"); elementSymbolList.Add("Cm");
            elementNameList.Add("Berkelium"); elementSymbolList.Add("Bk");
            elementNameList.Add("Californium"); elementSymbolList.Add("Cf");
            elementNameList.Add("Einsteinium"); elementSymbolList.Add("Es");
            elementNameList.Add("Fermium"); elementSymbolList.Add("Fermium");
            elementNameList.Add("Mendelevium"); elementSymbolList.Add("Md");
            elementNameList.Add("Nobelium"); elementSymbolList.Add("No");
            elementNameList.Add("Lawrencium"); elementSymbolList.Add("Lr");
            elementNameList.Add("Rutherfordium"); elementSymbolList.Add("Rf");
            elementNameList.Add("Dubnium"); elementSymbolList.Add("Db");
            elementNameList.Add("Seaborgium"); elementSymbolList.Add("Sg");
            elementNameList.Add("Bohrium"); elementSymbolList.Add("Bh");
            elementNameList.Add("Hassium"); elementSymbolList.Add("Hs");
            elementNameList.Add("Meitnerium"); elementSymbolList.Add("Mt");
            elementNameList.Add("Darmstadtium"); elementSymbolList.Add("Ds");
            elementNameList.Add("Roentgenium"); elementSymbolList.Add("Rg");
            elementNameList.Add("Copernicium"); elementSymbolList.Add("Cn");
            Console.WriteLine("What element do you want? Either input it's full name, with a capital letter, or it's elemnent symbol. E.g. N for Nitrogen");
            elementRequest = Console.ReadLine();

            elementNameList.ForEach(delegate (String elementName)
                {
                    if (elementRequest == elementName)
                    {
                        Console.WriteLine("Hydrogen");
                    }
                    else
                    {
                        Console.WriteLine("Not Hydrogen");
                    };
                });
            Console.Read();

然而,当我运行程序并输入氢气时,氦气和氢气都被认为是氢气。我该如何解决这个问题?

另外,如果有人有关于如何压缩这两个列表使它们更小的想法,请告诉我:)

谢谢:)

c#精确比较输入和字符串

希望代码所做的是从第一个列表中获取索引,并返回第二个列表中相同索引处的字符串。

你的代码目前没有做任何这些,但总是打印"Hydrogen",因此你的输出总是"Hydrogen",无论请求什么元素。

你可以通过实际查找索引来解决这个问题:

int indexOfElementName = elementNameList.IndexOf(elementRequest);
string elementSymbol = elementSymbolList[indexOfElementName];

请注意,它不处理不在列表中的大小写和请求元素(或输入错误)。

但是保持两个列表同步,以及这段代码,是一场等待发生的维护灾难。

可以使用字典,其中元素名是键,符号是值:

var elementDictionary = new Dictionary<string, string>
{
    { "Hydrogen", "H" },
    { "Helium", "He" },
    // ...
}

然后查找:

string elementSymbol = elementDictionary[elementRequest];

请注意,这仍然不处理大小写不敏感和未找到的元素,但我将把它留给您作为练习。

我会使用ElectricRouge建议的自定义类和列表。

我不喜欢字典,因为你需要同时按名称和符号搜索。此外,数据集很小(到目前为止只有118个元素)。

请参阅注释以获得代码的解释。

using System;
using System.Collections.Generic;
namespace Chemistry_Element_Calculator
{
    // Create a chemical element class
    // You can add more properties such as number of electrons, etc.
    public class ChemicalElement
    {
        public string Symbol
        {
            get; set;
        }
        public string Name
        {
            get; set;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            // Create a list of the elements, populate their properties
            var elements = new List<ChemicalElement>()
            {
                new ChemicalElement {Name = "Hydrogen", Symbol = "H"},
                new ChemicalElement {Name = "Helium", Symbol = "He"},
                new ChemicalElement {Name = "Lithium", Symbol = "Li"}
                // etc.
            };
            Console.WriteLine("What element do you want? Either input it's full name, with a capital letter, or it's elemnent symbol. E.g. N for Nitrogen");
            var elementRequest = Console.ReadLine();
            // Use find to get a matching element, compare both name and symbol
            var foundElement = elements.Find(element => element.Symbol == elementRequest || element.Name == elementRequest);
            if (foundElement == null)
            {
                // Output if no element is found
                Console.WriteLine("Element Not Found");
            }
            else
            {
                // Output if the element is found
                Console.WriteLine("Found element {0}.", foundElement.Name);
            }
            Console.WriteLine("[Press any key to finish]");
            Console.ReadKey();
        }
    }
}

代码使用List方法。如果要获取结果,它将只返回第一个匹配项。

我还建议迁移到String。如果你想进行不区分大小写的比较

最后我将阅读数据表单文件或数据库,但这是超出问题。