C#,我的反向字符串方法在主方法中不起作用的问题

时间:2019-03-02 23:26:57

标签: c#

我已经使用C#2个月了,我必须编写一个可以反转字符串的程序(需要使用方法)。我需要在另一个具有main方法的类中调用该方法。我已经做到了,但是当程序运行时,它只是要求我输入一个字符串,并且不会反向显示一个字符串,请帮忙。

这是我的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Assign3
{
    class MyStr
    {
        public string reverseStr(string Myname)
        {
            string temp = "";
            int i, j;

            Console.WriteLine("String in reverse: ");
            for (j = 0, i = Myname.Length - 1; i >= 0; i--, j++)
                temp += Myname[i];

            return temp;
        }

    }
}

和下一堂课

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Assign3
{
    class Test
    {
        static void Main(string[] args)
        {

            string answer;
            MyStr aString = new MyStr();
            //MyStr.reverseStr(string temp);
            //Console.WriteLine(aString);
            Console.WriteLine("enter a string");
            Console.ReadLine();
            answer = aString.reverseStr("");
            Console.WriteLine(answer);
        Console.WriteLine(aString.reverseStr(i);
            Console.ReadLine();

        }
    }
}

我不知道如何获取此方法以反向输出字符串。请帮助我了解我做错了什么,并指导我朝正确的方向进行纠正。

5 个答案:

答案 0 :(得分:3)

我根本没有检查过您的字符串反转算法,但是在以下两行中:

Console.ReadLine();
answer = aString.reverseStr("");

您可以通过ReadLine()从用户那里获得一个字符串,因为您没有将其存储在变量中,所以您将其丢弃了。然后,您要求reverseStr()反转一个空白字符串,这可能不是您想要的。

它看起来应该更像:

string response = Console.ReadLine();
answer = aString.reverseStr(response);

或者您可以将两者合而为一:

answer = aString.reverseStr(Console.ReadLine());

答案 1 :(得分:2)

您对用户的输入不做任何事情:

Console.ReadLine();

您正在反转一个空字符串:

answer = aString.reverseStr("");

存储用户的输入并将其取反:

var input = Console.ReadLine();
answer = aString.reverseStr(input);

答案 2 :(得分:1)

您可以像这样在主方法中反转字符串

 public static void Main(string[] args)
    {
        Console.WriteLine("enter a string");
        string stng =Console.ReadLine();
        char[] revArray = stng.ToCharArray();
        Array.Reverse( revArray );
        Console.WriteLine(revArray);
        Console.ReadLine();
    }

答案 3 :(得分:0)

您正在用空字符串aString.reverseStr("")填充方法。您必须将用户输入读入变量,然后将此变量传递给reverse方法。

string input = Console.ReadLine();
answer = aString.reverseStr(input);

您可以在不使用j变量的情况下将其删除。 Console.WriteLine("String in reverse: ");应该在main方法中,所有其他控制台输入/输出都在其中。 reverseStr方法应仅执行可逆操作,而没有副作用。这样会更干净。


您可以像这样通过构造函数传递参数

class MyStr
{
    private string _name;

    // Constructor. Has same name as class. Doesn't have a return type.
    public MyStr(string name)
    {
        _name = name;
    }

    public string ReverseStr()
    {
        string temp = "";
        int i, j;

        for (j = 0, i = _name.Length - 1; i >= 0; i--, j++)
            temp += _name[i];

        return temp;
    }
}

您会这样称呼它

var myStr = new MyStr(input);
string result = myStr.ReverseStr();

答案 4 :(得分:0)

不幸的是,没有内置函数可以做到这一点。您可以使用char数组并反转数组,然后返回字符串。

using System;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            string input;
            string output;
            MyStr aString = new MyStr();
            Console.WriteLine("enter a string");
           input = Console.ReadLine();
            output = aString.reverseStr(input);
            Console.WriteLine(output);
            Console.ReadLine();
        }
    }

class MyStr
{
    public string reverseStr(string Myname)
    {
        char[] arr = Myname.ToCharArray();
        Array.Reverse(arr);
        return new string(arr);
    }

}
}

或者,您可以定义字符串的扩展名,而不是MyStr类。您的通话说明将简单到

string output = input.Reverse();

扩展方法如下,它可以在任何地方使用而无需通过使用字符串变量实例化类。

public static class StringUtility
{
    public static string Reverse(this string input)
    {
        char[] arr = input.ToCharArray();
        Array.Reverse(arr);
        return new string(arr);
    }
}