如何用C#中的数字更改字符串中的所有字符?

时间:2012-01-14 12:33:13

标签: c# string switch-statement chars

我想用数字改变字符,例如:a用1,b用2 ... z用26.所以字符串“hello”将是这样的:82491513621.第一个问题是:怎么做这是最简单的方法,第二种:如何使用SWITCH语句执行此操作。我试过这个,但是休息之后;它停了感谢。

3 个答案:

答案 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表示。

  • A由值65
  • 表示
  • B由值66
  • 表示
  • ...等

来自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。