我想用数字改变字符,例如:a用1,b用2 ... z用26.所以字符串“hello”将是这样的:82491513621.第一个问题是:怎么做这是最简单的方法,第二种:如何使用SWITCH语句执行此操作。我试过这个,但是休息之后;它停了感谢。
答案 0 :(得分: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);
答案 1 :(得分:0)
以下代码段基于字母的ASCII表示。
来自char数组:
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'的ASCII代码(不是'a')。
不要尝试切换语句,它看起来很可怕。
编辑: 如果你真的想要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();
答案 2 :(得分: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;
....
}
现在函数准备就绪,您可以遍历字符串并对每个字符调用transform。