我想用数字改变字符,例如:a 用 1,b 用 2...z 用 26。所以字符串“hello”将是这样的:82491513621。第一个问题是:如何用最简单的方法做到这一点方式,第二个:如何使用 SWITCH 语句执行此操作。我试过这个,但休息后;它停止了。谢谢。
问问题
412 次
3 回答
2
无论你做什么,你都需要一个循环。一个简单的开关是不够的。
string input = "hello";
StringBuilder output = new StringBuilder();
foreach(char c in input)
{
output.Append((c - 'a' + 1));
}
Console.WriteLine(output);
一些解释:由于所有字母都有一个按字母顺序关联的数字 ASCII 码,这意味着我们可以从代表字母的任何字符中减去“a”并加 1 以获得其在字母表中的数字排名。
如果使用 switch 语句是绝对要求,您将需要为字符的每个可能值编写一个单独的案例:
string input = "hello";
StringBuilder output = new StringBuilder();
foreach(char c in input)
{
switch(c)
{
case 'a': output.Append("1"); break;
case 'b': output.Append("2"); break;
// etc.
case 'z': output.Append("26"); break;
}
}
Console.WriteLine(output);
于 2012-01-14T12:39:11.587 回答
0
以下代码段基于字母的ASCII表示。
- A 由值 65 表示
- B 由值 66 表示
- ...ETC。
从字符数组:
char[] letters = { 'A', 'B', 'C', 'D' };
int[] numbers = new int[4];
for (int i = 0; i < 4; i++)
{
numbers[i] = Convert.ToByte(letters[i], CultureInfo.InvariantCulture) - 64;
}
替代方式:
string myString = "HELLO";
StringBuilder stringAsNumbers = new StringBuilder();
for (int i = 0; i < myString.Length; i++)
{
stringAsNumbers.Append(Convert.ToByte(myString[i], CultureInfo.InvariantCulture) - 64);
}
注意区分大小写。上面的代码仅适用于大写,因为 65 是 'A'(不是 'a')的 ASCII 码。
不要尝试 switch 语句,它看起来很可怕。
编辑:如果你真的想要 switch 语句,这里是:
string myString = "AAB";
StringBuilder stringAsNumbers = new StringBuilder();
for (int i = 0; i < myString.Length; i++)
{
switch (myString[i])
{
case 'A':
case 'a':
stringAsNumbers.Append("1");
break;
case 'B':
case 'b':
stringAsNumbers.Append("2");
break;
...
}
}
编辑:要获得最终string
结果StringBuilder
,请使用stringAsNumbers.ToString();
于 2012-01-14T12:38:03.363 回答
0
您可以定义一个函数,如:
int transform(char ch)
{
}
这可以使用字典来实现:
Dictionary<char, int> map;
map['a'] = 1;
map['b'] = 2;
...
return map[ch];
或使用您提到的开关:
switch(ch)
{
case 'a': return 1;
case 'b': return 2;
....
}
现在函数已经准备好了,你可以遍历你的字符串并对每个字符调用转换。
于 2012-01-14T12:41:01.683 回答