none
字符串倒序输出? RRS feed

  • 问题

  • 各位高手!请问如何编写一个控制台应用程序【让用户输入一个字符串,然后将它倒序输出】?
    请各位不吝指教!
    2010年3月10日 13:27

答案

  • C#没有提供逆序方法,所以自己写一个吧:
    void Print() {
    String stra = "china"; //原字符
    String strb = ""; // 调转顺序后字符
    foreach(char cha in stra.ToCharArray())
    {
    strb = cha + strb ;
    }
    Console.Write(strb) ; // 打印字符串
    }
    2010年3月10日 13:33
  • string str = "abcdefg";
    char[] arr = str.ToCharArray();
    char[] reversed = str.ToCharArray().Reverse().ToArray();
    string reverseString = new String(reversed);

    是有Reverse 方法的,不过在Enumerable 类上。 不在String类上面。

    2010年3月10日 14:05
  •             string str = "china";
                char[] s = str.ToCharArray();
                int i=s.Length;
                string newstr="";
                for (int h = i-1; h >=0; h--)
                {
                    newstr+=s[h].ToString();
                  }
                    Console.Write(newstr);

    2010年3月10日 16:42
  • 考虑最好的算法的话,就要用 unsafe code。以下代码不一定能 Work,但思路就是这样的。注意,由于利用了指针,不需要返回值。

    unsafe public void Reverse(string input)
    {
        int start = 0;
        int end = input.Length - 1;

        if (start <= end)
        {
            return;
        }

        fixed (char* p = input)
        {
            while (start - end < 0)
            {
                char temp = p[start];
                p[start] = p[end];
                p[end] = p[start];

                start++;
                end--;
            }
        }
    }

    例如

    string test = Reverse(test);
    Console.WriteLine(test);

    试试看。 :)

    2010年3月11日 9:51

全部回复

  • C#没有提供逆序方法,所以自己写一个吧:
    void Print() {
    String stra = "china"; //原字符
    String strb = ""; // 调转顺序后字符
    foreach(char cha in stra.ToCharArray())
    {
    strb = cha + strb ;
    }
    Console.Write(strb) ; // 打印字符串
    }
    2010年3月10日 13:33
  • string str = "abcdefg";
    char[] arr = str.ToCharArray();
    char[] reversed = str.ToCharArray().Reverse().ToArray();
    string reverseString = new String(reversed);

    是有Reverse 方法的,不过在Enumerable 类上。 不在String类上面。

    2010年3月10日 14:05
  •             string str = "china";
                char[] s = str.ToCharArray();
                int i=s.Length;
                string newstr="";
                for (int h = i-1; h >=0; h--)
                {
                    newstr+=s[h].ToString();
                  }
                    Console.Write(newstr);

    2010年3月10日 16:42
  • 考虑最好的算法的话,就要用 unsafe code。以下代码不一定能 Work,但思路就是这样的。注意,由于利用了指针,不需要返回值。

    unsafe public void Reverse(string input)
    {
        int start = 0;
        int end = input.Length - 1;

        if (start <= end)
        {
            return;
        }

        fixed (char* p = input)
        {
            while (start - end < 0)
            {
                char temp = p[start];
                p[start] = p[end];
                p[end] = p[start];

                start++;
                end--;
            }
        }
    }

    例如

    string test = Reverse(test);
    Console.WriteLine(test);

    试试看。 :)

    2010年3月11日 9:51
  • string str = "abcdefg";
    char[] arr = str.ToCharArray();
    char[] reversed = str.ToCharArray().Reverse().ToArray();
    string reverseString = new String(reversed);

    是有Reverse 方法的,不过在Enumerable 类上。 不在String类上面。


    太谢谢你的回复,你的思路很好。可是,前面的代码需不需要声明
    public static class Enumerable
    2010年3月11日 12:20
  •             string str = "china";
                char[] s = str.ToCharArray();
                int i=s.Length;
                string newstr="";
                for (int h = i-1; h >=0; h--)
                {
                    newstr+=s[h].ToString();
                  }
                    Console.Write(newstr);


    感谢你的回复,你的思路和我之前想的一样
    2010年3月11日 12:21
  • 考虑最好的算法的话,就要用 unsafe code。以下代码不一定能 Work,但思路就是这样的。注意,由于利用了指针,不需要返回值。

    unsafe public void Reverse(string input)
    {
        int start = 0;
        int end = input.Length - 1;

        if (start <= end)
        {
            return;
        }

        fixed (char* p = input)
        {
            while (start - end < 0)
            {
                char temp = p[start];
                p[start] = p[end];
                p[end] = p[start];

                start++;
                end--;
            }
        }
    }

    例如

    string test = Reverse(test);
    Console.WriteLine(test);

    试试看。 :)


    谢谢你的指教,我会好好试试的!
    2010年3月11日 12:22
  • C#没有提供逆序方法,所以自己写一个吧:
    void Print() {
    String stra = "china"; //原字符
    String strb = ""; // 调转顺序后字符
    foreach(char cha in stra.ToCharArray())
    {
    strb = cha + strb ;
    }
    Console.Write(strb) ; // 打印字符串
    }

    很好,代码可以运行,谢谢!
    2010年3月11日 12:29
  • 考虑最好的算法的话,就要用 unsafe code。以下代码不一定能 Work,但思路就是这样的。注意,由于利用了指针,不需要返回值。

    unsafe public void Reverse(string input)
    {
        int start = 0;
        int end = input.Length - 1;

        if (start <= end)
        {
            return;
        }

        fixed (char* p = input)
        {
            while (start - end < 0)
            {
                char temp = p[start];
                p[start] = p[end];
                p[end] = p[start];

                start++;
                end--;
            }
        }
    }

    例如

    string test = Reverse(test);
    Console.WriteLine(test);

    试试看。 :)


    你好,我以前看到过一篇关于指针在C#中的使用的文章。但是里面没有讲到【fixed关键字】的内容,你能不能告诉我一下!谢谢。
    2010年3月11日 13:36