【问题标题】:how to change a char to the previous one of it (alphabetically) in string using c#?如何使用 c# 将 char 更改为字符串中的前一个字符(按字母顺序)?
【发布时间】:2014-11-30 23:41:05
【问题描述】:

您好,我正在寻找一种将字符串中的单个字符更改为它的前一个字符的好方法。我的意思是如果我有这个字符串=“abcd”我想将'd'字符更改为'c'?如何将字符更改为之前的字符(按字母顺序)?

我想在这里使用该方法:

int StringSize=0; 
string s=" ";
s = Console.ReadLine();
StringSize = s.Length;
s.Replace(s[StringSize-1],the previous char);

我想将 char s [StringSize-1] 更改为它的前一个字符。

我尝试根据字符的 ASCII 码来执行此操作,但我没有找到将表单 char 转换为 ASCII 的方法。

【问题讨论】:

  • 字符串是不可变的。重新分配给s
  • 您将char 转换为int 以获取其数值。

标签: c# string char ascii


【解决方案1】:
    var str = "abcd";
    for (int i = 0; i < str.Length; i++)
    {
        str = str.Replace(str[i], (char)((byte)str[i] - 1));
    }

【讨论】:

    【解决方案2】:

    将返回字符串替换为对象,但不更改其上的值。解决方案:

    s = s.Replace(s[StringSize-1], the previous char);
    

    【讨论】:

      【解决方案3】:

      char 已经是 ASCII,但要对其进行数学运算,您需要一个数字。

      所以:

      1. 转换为int
      2. 做数学题(减 1)
      3. 转回char

        char newChar = (char)((int)oldChar - 1);
        

      或者在你的代码中:

      s = s.Replace(s[StringSize-1], (char)((int)s[StringSize-1] - 1));
      

      注意事项:

      • 这不适用于“a”或“A”
      • 字符串是不可变的,您不能只更改一个字符。您可以使用替换的字符创建 new 字符串,但这在技术上不是一回事。

      【讨论】:

      • 从技术上讲,字符串是不可变的,但是,您可以创建一个使用指针操作字符串的unsafe 函数。但是,这绝对不是一个好主意。
      • @icemanind 是的,当你让指针返回时,你可以做更多的事情。正如你所说的,不是一个好主意,尤其是对于新手来说。
      猜你喜欢
      • 1970-01-01
      • 2011-08-30
      • 2014-11-26
      • 2019-09-29
      • 2015-09-06
      • 2015-05-07
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      相关资源
      最近更新 更多