Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#,我的反向字符串方法在main方法中不起作用的问题_C# - Fatal编程技术网

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

C#,我的反向字符串方法在main方法中不起作用的问题,c#,C#,我已经使用C#2个月了,我必须编写一个程序来反转字符串(需要在方法中)。我需要在另一个有main方法的类中调用该方法。我已经这样做了,但当程序运行时,它只要求我输入一个字符串,而不是反向显示一个字符串,请帮助 这是我的密码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Assign3 {

我已经使用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();

        }
    }
}

我不知道如何让这个方法反向输出字符串。请帮助我理解我做错了什么,并请指导我正确的方向来纠正此错误。

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

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

它应该看起来更像:

string response = Console.ReadLine();
answer = aString.reverseStr(response);
或者,您可以将这两种方法组合在一行中:

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

您不会对用户的输入执行任何操作:

Console.ReadLine();
您正在反转一个空字符串:

answer = aString.reverseStr("");
存储用户的输入并将其反转:

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

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

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

您正在向该方法输入一个空字符串
aString.reverseStr(“”
)。您必须将用户输入读入一个变量,并将其传递给reverse方法

string input = Console.ReadLine();
answer = aString.reverseStr(input);
您可以删除
j
变量,因为您不使用它。
Console.WriteLine(“字符串反向:”)
应该在main方法中,所有其他控制台输入/输出都在main方法中。
reverseStr
方法应该只做反向操作,而没有副作用。这会更干净


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

 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();
    }
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();
你会这样称呼它吗

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

不幸的是,没有内置函数来实现这一点。您可以使用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);
    }

}
}
或者,您可以为string定义一个扩展,而不是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);
    }
}

Console.ReadLine返回用户键入的内容。如果没有得到此结果,则无法反转任何内容。请尝试回显包含在一些分隔符中的输入。上一个用于提及未使用的j变量。虽然这并没有回答问题,但绝对值得一提!对不起,我无意中更新了您的答案,而不是我的:-(感谢所有帮助过我的人,它现在工作得很好。我如何使用构造函数方法将输入字符串作为参数并将其分配给我的类的私有字符串?好的,谢谢,可以用调用方法的相同方式调用构造函数吗?我为什么要将代码放入构造函数中替代方法?在末尾添加一个
Console.ReadLine();
,这样我们就可以看到正确的结果。