我想用数字来改变字符,例如:a用1,b用2 ... z用26.因此字符串“hello”将是这样的:82491513621.第一个问题是:如何做到这一点最简单的方法,第二:如何用SWITCH语句来做到这一点。我试过了,但是休息之后;它停止。谢谢。如何用C#中的数字来更改字符串中的所有字符?
回答
你需要一个循环,无论你做。一个简单的开关是不够的。
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);
以下几段代码是基于ASCII表示的字母。
- A由65
- B由值66
- ...等表示的值表示。
从字符数组:
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();
虽然它是作业,所以'switch'可能是一个要求。 – 2012-01-14 12:38:58
是的,作业是关于开关,它是必需的,但也想要最简单的方法。 – samuraisxmali 2012-01-14 12:49:40
好!看到更新的答案。 – ken2k 2012-01-14 12:53:15
你可以这样定义一个函数:
int transform(char ch)
{
}
这可以使用字典来实现:
Dictionary<char, int> map;
map['a'] = 1;
map['b'] = 2;
...
return map[ch];
或使用开关a你提到的:
switch(ch)
{
case 'a': return 1;
case 'b': return 2;
....
}
现在函数已经准备好了,你可以遍历你的字符串并调用每个字符的变换。
你可以发布你的当前代码吗? – 2012-01-14 12:36:50
你能显示你的代码吗?在家庭作业中发现错误并没有问题,但是不能提供代码。 – dasblinkenlight 2012-01-14 12:37:11
你怎么会变成82491513621?不应该是'8 5 12 12 15'吗? – Default 2012-01-14 12:57:37