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

发布于 2024-12-27 08:55:32 字数 141 浏览 1 评论 0原文

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

i want to change chars with numbers, for example: a with 1, b with 2... z with 26. so the string "hello" will be something like this: 82491513621. the first question is: how to do this with easiest way, and the second: how to do this with SWITCH statement. i tried this, but after break; it stops. thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

指尖上得阳光 2025-01-03 08:55:32

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

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

You need a loop, whatever you do. A simple switch is not enough.

string input = "hello";
StringBuilder output = new StringBuilder();
foreach(char c in input)
{
   output.Append((c - 'a' + 1));
}

Console.WriteLine(output);

Some explanation: since all letters have a numeric ASCII code associated in alphabetic order, it means that from any char representing a letter we can subtract 'a' and add 1 to get its numeric rank in the alphabet.

If using the switch statement is an absolute requirement, you will need to write a separate case for each possible value of a character:

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);
优雅的叶子 2025-01-03 08:55:32

您可以定义一个函数,如下所示:

int transform(char ch)
{
}

这可以使用字典来实现:

Dictionary<char, int> map;  
map['a'] = 1;
map['b'] = 2;
...
return map[ch];

或者使用您提到的 switch 来实现:

switch(ch)
{
   case 'a': return 1;
   case 'b': return 2;
   ....
}

现在函数已准备就绪,您可以迭代字符串并对每个字符调用转换。

You could define a function like:

int transform(char ch)
{
}

This could either be implemented use a dictionary:

Dictionary<char, int> map;  
map['a'] = 1;
map['b'] = 2;
...
return map[ch];

or use switch as you mentioned:

switch(ch)
{
   case 'a': return 1;
   case 'b': return 2;
   ....
}

Now the function is ready, you could just iterate through your string and call transform against each characters.

一桥轻雨一伞开 2025-01-03 08:55:32

以下代码段基于字母的 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();

Following pieces of code are based on the ASCII representation of the letters.

  • A is represented by the value 65
  • B is represented by the value 66
  • ...etc.

From char array:

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

Alternate way:

string myString = "HELLO";
StringBuilder stringAsNumbers = new StringBuilder();

for (int i = 0; i < myString.Length; i++)
{
    stringAsNumbers.Append(Convert.ToByte(myString[i], CultureInfo.InvariantCulture) - 64);
}

Take care of the case sensitivity. The code above works for upper case only, as 65 is the ASCII code for 'A' (not 'a').

Don't try the switch statement, it'll look horrible.

EDIT:
If you really want the switch statement, here it is:

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

EDIT:
To get the final string for the StringBuilder, use stringAsNumbers.ToString();

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文