2016-11-23 64 views
-1

我是第一年级的学生,所以我不太了解c#但是......
有什么办法来检查用户输入的数组是否包含某个字符串?
如果是这样我需要给另一个数组添加一个值。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 
} 

我需要检查由用户创建的数组,如果有数学那么+ 25points已被添加

+1

这是可能的。你能展示你已经做了什么来尝试解决这个问题吗? – DVK

+0

您是否尝试过regEx? – Prajwal

+2

为什么你有三个变量('s','p'和'g'),它们总是一样的?你有没有考虑过创建一个'学生'类,其中包括'年级','主题'和'点数'的属性? (通常像这样的“平行集合”是一个坏主意。) –

回答

0

有任何方式来检查[..]数组是否包含某些字符串

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

using System.Linq; 


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

PS。考虑乔恩斯基特劝以下

编辑:

,你实际上可以按照用户一步一步的价值在进入过程中,你也可以立即检查是否由于输入您的标准匹配:

// 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:

既然你增加所有3个变量在for循环完全相同的方式,你能给我们Ë只有1个变量和指标每个数组与同一个:

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

我现在没有机会测试它,但我想我正在尝试这个和Contains不会在 –

+0

中着色@EduardsRatniks不会着色?你什么意思? –

+0

@EduardsRatniks您还可以捕获用户输入并检查它是否立即匹配。请参阅我的编辑 –

0

我重新设计你的代码实现一些自定义类,所以你可以得到一些想法:

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)); 
    }