【问题标题】:how to change all chars in string with numbers in C#?如何用C#中的数字更改字符串中的所有字符?
【发布时间】:2012-01-14 12:33:12
【问题描述】:

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

【问题讨论】:

  • 你能发布你当前的代码吗?
  • 你能展示你的代码吗?作业中发现bug可以,但给出代码就不行了。
  • 你怎么打招呼变成82491513621??不应该是8 5 12 12 15吗?
  • 默认,你是对的,它唯一的示例数字,我想表明它必须是数字,当然它不是你好

标签: c# string switch-statement chars


【解决方案1】:

无论你做什么,你都需要一个循环。一个简单的开关是不够的。

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);

【讨论】:

  • 在 append 方法或 Console.WriteLine()-ing 时不需要 .ToString(),因为两者都有可以分别处理整数和 StringBuilder 的重载。
  • @kronoz:谢谢,你是对的。我已经编辑了我的帖子以删除 ToString() 调用。
【解决方案2】:

您可以定义如下函数:

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;
   ....
}

现在函数已经准备好了,你可以遍历你的字符串并对每个字符调用转换。

【讨论】:

    【解决方案3】:

    以下代码片段基于字母的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;
            ...
        }
    }
    

    编辑: 要获得StringBuilder 的最终string,请使用stringAsNumbers.ToString();

    【讨论】:

    • 是的,作业是关于switch的,是必须的,但也想要最简单的方法。
    猜你喜欢
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多