我在HackerRank中做了一些挑战。我通常在visualstudio中使用windows Form
项目来进行调试,但意识到我输入测试用例时输了很多时间。所以我想建议一种我可以轻松模拟console.ReadLine()
通常情况下的挑战都是这样描述的:
5
1 2 1 3 2
3 2
然后读取如下:使用三个ReadLine
static void Main(String[] args) {
int n = Convert.ToInt32(Console.ReadLine());
string[] squares_temp = Console.ReadLine().Split(' ');
int[] squares = Array.ConvertAll(squares_temp,Int32.Parse);
string[] tokens_d = Console.ReadLine().Split(' ');
int d = Convert.ToInt32(tokens_d[0]);
int m = Convert.ToInt32(tokens_d[1]);
// your code goes here
}
现在我正在考虑创建一个文件testCase.txt
并使用StreamReader。
using (StreamReader sr = new StreamReader("testCase.txt"))
{
string line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
这样我可以用Console.ReadLine()
替换sr.ReadLine()
,但这需要打开文本编辑器,删除旧案例,复制新案例并每次保存文件。
那么有没有办法可以使用文本框,所以只需要在文本框中复制/粘贴并使用streamReader或类似的东西从文本框中读取?
答案 0 :(得分:1)
您可以使用StringReader类来读取string
而不是文件。
答案 1 :(得分:0)
您接受的解决方案!并没有真正模拟Console.ReadLine(),因此您不能将其直接粘贴到 HackerRank 。
我这样解决了:
。
。
只需将此类粘贴到静态Main方法上方或在主类内部的任何位置即可隐藏原始的 System.Console
class Console
{
public static Queue<string> TestData = new Queue<string>();
public static void SetTestData(string testData)
{
TestData = new Queue<string>(testData.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(x=>x.TrimStart()));
}
public static void SetTestDataFromFile(string path)
{
TestData = new Queue<string>(File.ReadAllLines(path));
}
public static string ReadLine()
{
return TestData.Dequeue();
}
public static void WriteLine(object value = null)
{
System.Console.WriteLine(value);
}
public static void Write(object value = null)
{
System.Console.WriteLine(value);
}
}
并以这种方式使用它。
//Paste the Console class here.
static void HackersRankProblem(String[] args)
{
Console.SetTestData(@"
6
6 12 8 10 20 16
");
int n = int.Parse(Console.ReadLine());
string arrStr = Console.ReadLine();
.
.
.
}
现在您的代码将看起来一样!而且您可以在不更改代码的情况下测试任意数量的数据。
注意:如果您需要更多复杂的Write或WriteLine方法,只需添加它们并将其发送到原始System.Console(.. args)
答案 2 :(得分:-1)
只需设置应用程序参数: 并在 input.txt 中提供您的输入文本。 小心使用 ANSI 编码保存文件。