【问题标题】:C# Check array for string [closed]C#检查数组中的字符串[关闭]
【发布时间】:2017-04-07 13:50:17
【问题描述】:

我是一年级学生,所以我对 c# 还不太了解....
有什么方法可以检查用户输入的数组是否包含某个字符串?
如果是,我需要向另一个数组添加一个值。

这是我目前的代码:

var lookup = new Dictionary<string, string>           
{
    ["H1"] = "100",
    ["O1"] = "56",
    ["H2"] = "88",
    ["O2"] = "46",
    ["H3"] = "77",
    ["O3"] = "37",
    ["H4"] = "66",
    ["O4"] = "28",
    ["H5"] = "56",
    ["O5"] = "20",
    ["H6"] = "46",
    ["O6"] = "12",
    ["H7"] = "37",
    ["O7"] = "0",
    ["H8"] = "0",
    ["O8"] = "0",
};     

//input grades/subject
int s;
int g;
int p;

string[] grades = new string[6];
string[] subjects = new string[6];
string[] points = new string[6];

// Accepting value from user 
for (s = 0, g = 0,p=0; s <= 5; s++, g++,p++)
{
    Console.Write("\nEnter your subject:\t");
    subjects[s] = Convert.ToString(Console.ReadLine());
    subjects[s] = subjects[s].ToUpperInvariant();


    Console.Write("\nEnter your grade:\t");
    grades[g] = Convert.ToString(Console.ReadLine());
    grades[g] = grades[g].ToUpperInvariant();
    if (!lookup.TryGetValue(grades[g], out points[p]))
        Console.WriteLine("Wrong Grade Format!");

}

Console.Clear();
for (s = 0, g = 0,p=0; s <= 5; s++, g++,p++)
{
    Console.WriteLine("{0,15}:{1}:{2}", subjects[s], grades[g],points[p]);//output
}

我需要检查用户创建的数组,如果有数学,则必须添加 +25 分

【问题讨论】:

  • 有可能。您能否展示您为解决问题所做的工作?
  • 你试过正则表达式吗?
  • 为什么你的三个变量(spg)总是相同的?您是否考虑过创建一个具有GradesSubjectsPoints 属性的Student 类? (通常有这样的“并行集合”是个坏主意。)
  • 对不起,我是一年级学生,所以我照做了

标签: c# arrays string contains


【解决方案1】:

有什么方法可以检查 [..] 数组是否包含某个字符串

是的,有。甚至完全像这样调用该方法。
首先确保您使用的是必要的命名空间:

using System.Linq;


if (subjects.Contains("MATH"))
{
    // do what ever is needed
}

ps。考虑听从 Jon Skeet 的建议

编辑:

因为您实际上可以一步一步地跟踪用户的值输入过程,您也可以立即检查输入是否符合您的标准:

// Accepting value from user 
for (s = 0, g = 0,p=0; s <= 5; s++, g++,p++)
{
    Console.Write("\nEnter your subject:\t");
    string input = Convert.ToString(Console.ReadLine());
    if (input.ToUpperInvariant() == "MATH")
    { /* do what ever is needed */}
    subjects[s] = input.ToUpperInvariant();

编辑 2:

由于您在 for 循环中以完全相同的方式递增所有 3 个变量,因此您只能使用 1 个变量并将每个数组索引为相同的变量:

for (int i = 0; i <= 5; i++)
{
    subjects[i]...
    grades[i]...
    points[i]...
}

【讨论】:

  • 我现在没有机会测试它,但我想我正在尝试这个并且包含不会着色
  • @EduardsRatniks 不会上色?你什么意思?
  • @EduardsRatniks 您还可以捕获用户输入并立即检查它是否匹配。查看我的编辑
  • 可以添加第二个条件吗?
  • @EduardsRatniks 您可以根据需要添加任意数量的条件。你心目中的条件是什么?
【解决方案2】:

我重新设计了您的代码,实现了一些自定义类,以便您获得一些想法:

class Student
{
    public string Name { get; }
    public List<Grade> Grades { get; set; }
    public Student(string name)
    {
        Name = name;
        Grades = new List<Grade>();
    }    
}
class Grade
{
    public string Subject { get; set; }
    public string Code { get; set; }
    public int Points { get; set; }
}
class Program
{
    static Dictionary<string, string> lookup = new Dictionary<string, string>
    {
        ["H1"] = "100", ["O1"] = "56", ["H2"] = "88", ["O2"] = "46", ["H3"] = "77",
        ["O3"] = "37", ["H4"] = "66", ["O4"] = "28", ["H5"] = "56", ["O5"] = "20",
        ["H6"] = "46", ["O6"] = "12", ["H7"] = "37", ["O7"] = "0", ["H8"] = "0", ["O8"] = "0",
    };
    static void Main(string[] args)
    {
        Student s = new Student("new student");

        // Accepting value from user 
        while (s.Grades.Count < 6) //amount of grades you want to input
        {
            Grade g = new Grade();
            string points = string.Empty;

            Console.Write("\nEnter your subject:\t");
            //There's no need to convert consoleReadLine to string
            g.Subject = Console.ReadLine().ToUpperInvariant();

            //keep asking while the user doesn't insert a valid grade lookup code
            while (string.IsNullOrEmpty(points))
            {
                Console.Write("\nEnter your grade:\t");
                g.Code = Console.ReadLine().ToUpperInvariant();

                if (!lookup.TryGetValue(g.Code, out points))
                    Console.WriteLine("Wrong Grade Format!");
                else
                    g.Points = int.Parse(points);
            }
            //points modification condition
            if (g.Subject.Equals("Math", StringComparison.OrdinalIgnoreCase))
                g.Points += 25;

            //add the grade data to the student's grades
            s.Grades.Add(g);
        }
        Console.Clear();
        //output using a Linq query
        s.Grades.ForEach(g => Console.WriteLine("{0,15}:{1}:{2}", g.Subject, g.Code, g.Points)); 
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多