none
为何所有字符都被替换成+1了? RRS feed

  • 问题

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string greetingText = "Hello from all the guys at Wrox Press.";
                Console.WriteLine("{0}",greetingText);
    
                greetingText += "We do hope you enjoy this book as much as we enjoyed writing it.";
                Console.WriteLine("{0}",greetingText);
                Console.ReadKey();
    
                //上面是string类的应用,下面开始StringBuilder的应用
    
                StringBuilder SrtingBuildergreetingText = new StringBuilder("Hello from all the guys at Wrox Press.", 150);
                SrtingBuildergreetingText.Append("We do hope you enjoy this book as much as we enjoyed writing it.");
    
                for (int i = ('z'); i > (int)'a'; i- -)
                {
                    char old1 = (char)i;          //这里i不是等于122么,‘z’的值为122的哦
                    char new1 = (char)(i + 1);    //这里i不是等于122+1=123了么? 之后new1=123了,对ASCII码是“{”了。
                    SrtingBuildergreetingText.Replace(old1, new1);      //怎么会出现每个字母 + 1 的情况呢?
                }
    
                for (int i = (int)'Z'; i > (int)'A'; i- -) 
                {
                    char old1 = (char)i;
                    char new1 = (char)(i + 1);
                    SrtingBuildergreetingText = SrtingBuildergreetingText.Replace(old1, new1);
                }
    
                Console.WriteLine("加密后的编码为:\n" + SrtingBuildergreetingText+"字母值都加1后显示");
                Console.ReadKey();
            }
        }
    }

    //这里i不是等于122么,‘z’的值为122的哦

    //这里i不是等于122+1=123了么? 之后new1=123了,对ASCII码是“{”了。
     //怎么会出现每个字母 + 1 的情况呢?



    2017年7月8日 7:41

全部回复

  • 不是很明白你想說的

    你這程式不就是把每個字母變成下一位字母 像是 c變d E變F 嗎?

    除了你 a 不在迴圈的條件式之外,都確實是下一位了。

    2017年7月9日 7:59
  • Debug一下,看下每步骤运算的值。

    可能需要了解下 Replace方法的算法


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年7月10日 0:33
  • Hi 何Tr 16,

    感谢你在MSDN论坛发帖。

    我测试你的程序,你说的这些变量的值,都是没问题的。下面是我测试的截图。

    你可以看到 i 的值是122,old1 是122,new1是123。 没有问题的。

    问题可能出现在replace这个函数上面,你使用的是下面的方法。

    Replace(String, String)

    从MSDN解释来说,他会把所有出现的字符串替换成另外一个字符串。是字符串的替换,可以使用下面的例子来解释。

    string str = "The quick br!wn d#g jumps #ver the lazy cat.";
      StringBuilder sb = new StringBuilder(str);
    sb.Replace("cat", "dog");            // All "cat" -> "dog"
    

    上面这段代码,就是把cat 替换成dog,但是其他都不替换,因为没有匹配到。

    关于更详细的解释,参考这个文档。

    https://msdn.microsoft.com/en-us/library/system.text.stringbuilder(v=vs.110).aspx

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年7月10日 6:43
    版主
  • 同意Coding Kid Peter Chang的说法。

    因为您在循环里边把每个循环的值都替换成+1的值了。

    建议:您应该取出整个字符串,然后把替换放到循环外执行,对某些符合条件的值进行替换哦。


    ASP.NET Forum
    StackOverFlow
    FreeRice Donate
    Issues to report



    2017年7月15日 5:26
    版主