簡體   English   中英

根據 C# 中包含的字符為字符串賦值的簡單方法是什么?

[英]What's an easy way to give a string a value based on the characters it contains in C#?

我試圖根據字符串包含的字符來獲得總和值。 字符值由我確定並且有些隨意('A' = 1、'B' = 4、'C' = 2 等)。 例如,如果string s = "ABC" ,則int value = 7 ,因為 1 + 4 + 2 = 7。在 C# 中編寫此代碼的有效方法是什么?

現在我的代碼如下所示:

//Declare variables
string name = JOHN
int i = 0;
int nameValue = 0;
string temp = "";
string[] nameArray;

//Convert name to string array so I can use String.Contains() to check what letters are in name
foreach (char c in name)
{
   temp += c.ToString();
   temp += ".";
}

temp = temp.Remove(temp.Length - 1, 1);
nameArray = temp.Split('.');            

//Determine nameValue by iterating through nameArray and checking each string
foreach (string s in nameArray)
{
   if (nameArray[i].Contains('A')) { nameValue += 1 }
   else if (nameArray[i].Contains('B')) { nameValue += 4 }
   else if (nameArray[i].Contains('C')) { nameValue += 2 }
   else if (nameArray[i].Contains('D')) { nameValue += 3 }
   .
   .
   .
   else if (nameArray[i].Contains('Y')) { nameValue += 7 }
   else if (nameArray[i].Contains('Z')) { nameValue += 5 }

   i++;
}

Console.WriteLine(nameValue);

我將字符串更改為字符串數組,因為我的名稱中有重復的字母(即 Jill),並且我想給名稱中的每個字母一個值。 如果我使用 String.Contains() 而不分隔每個字母,我認為它只會計算重復字母一次。

我覺得必須有一種更好的方法,而不是進行所有字符串操作並為字母表中的每個字母使用單獨的條件語句,但我找不到任何東西。 謝謝。

如果您想將 map后續字符(例如'A'..'Z' )轉換為 integer 值,我建議使用數組

  using System.Linq;

  ...

  int[] map = new int[] {
    //TODO: put corresponding integer values starting from 'A'
    4, 2, 3
  };  

  ...

  s = "ABC";

  int sum = s.Sum(c => map[c - 'A']);

一般情況下,如果要 map任意符號,可以使用字典

  using System.Linq;

  ...

  Dictionary<char, int> map = new Dictionary<char, int>() {
    //TODO: put all required pairs here
    {'A', 4},
    {'B', 2},
    {'C', 1},
    {'#', -123},
  };

  ...

  s = "ABC";

  // if there's no map (e.g. for '*'), we assume the value being 0
  int sum = s.Sum(c => map.TryGetValue(c, out int v) ? v : 0);   

http://www.asciitable.com/

你會看到國會大廈 A 是 65

string str = "Hi there";
foreach(char c in str.ToUpper())
{
    value += ((int)c) - 64;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM