C#以StandardInput方式读取命令行提供的文本文件
C# Reading a text file provided via the command line in the way of StandardInput
我正在尝试解决旧的 FizzBuzz 挑战。我弄清楚了 FizzBuzz 部分背后的逻辑(为可被 3 整除的数字打印 Fizz,为可被 5 整除的数字打印 Buzz,为可被两者整除的数字打印 FizzBuzz)。
说明:
玩家一般坐成一圈。第一个玩家说出数字“1”,然后每个玩家依次说出下一个数字。但是,任何可被 X 整除的数字(例如,三)都将替换为 fizz 一词,而任何可被 Y 整除的数字(例如,五)将替换为单词 buzz。可被两者整除的数字成为嘶嘶声。犹豫或犯错的玩家将被淘汰出局。
编写一个程序,打印出最后一系列数字,其中可被 X、Y 和两者整除的数字替换为“F”代表嘶嘶声,“B”代表嗡嗡声,“FB”代表嘶嘶声。
输入样本:
你的程序应该接受一个文件作为它的第一个参数。该文件包含多个分隔行;每行包含 3 个以 space 分隔的数字。第一个数字是第一个分隔符 (X),第二个数字是第二个分隔符 (Y),第三个数字是您应该数多远 (N)。您可以假设输入文件的格式正确并且数字是有效的正整数。
例如:
3 5 10
2 7 15
输出样本:
打印出系列 1 到 N,将可被 X 整除的数字替换为“F”,可被 Y 整除的数字替换为“B”,可被两者整除的数字替换为“FB”。由于输入文件包含多组值,您的输出应该每组打印一行。确保打印的每一行中没有尾随的空 space。
1 2 F 4 B F 7 8 F B
1 F 3 F 5 F B F 9 F 11 F 13 FB 15
约束条件:
• 测试用例数≤20
• "X" 在 [1, 20]
范围内
• "Y" 在 [1, 20]
范围内
• "N" 在 [21, 100]
范围内
我不是在找人帮我做这件事,只是帮助我更好地理解我是如何阅读文本文件的。如果这是 "dumb" 问题,我深表歉意。我已经研究了微软的开发网络页面以进行澄清,但这让我更加困惑......谢谢。
标准输出 (stdout) 只是常规的控制台输出;
要向其发送内容,只需执行 Console.WriteLine
。
发送到 stderr Console.Error.WriteLine
,但挑战不需要它。
CodeEval 上的挑战不需要您从 stdin 输入任何内容,您只需从第一个文件中获取文件名Main 方法的参数:
public static void Main(string[] args)
{
var fileContent = File.ReadAllText(args[0]);
}
如果你必须从 stdin 有效地读取,你可以只使用 Console.ReadLine
:
string line;
while ((line = Console.ReadLine()) != null)
{
// Do whatever you need to do with the line variable read from the stdin.
}
或与您提供的代码集成:
using (var reader = new StreamReader(Console.OpenStandardInput()))
{
Console.WriteLine(FizzBuzz.ParseInput(reader));
}
而且,如果您只需要解析文本,还有另一种选择:Console.In
我正在尝试解决旧的 FizzBuzz 挑战。我弄清楚了 FizzBuzz 部分背后的逻辑(为可被 3 整除的数字打印 Fizz,为可被 5 整除的数字打印 Buzz,为可被两者整除的数字打印 FizzBuzz)。
说明:
玩家一般坐成一圈。第一个玩家说出数字“1”,然后每个玩家依次说出下一个数字。但是,任何可被 X 整除的数字(例如,三)都将替换为 fizz 一词,而任何可被 Y 整除的数字(例如,五)将替换为单词 buzz。可被两者整除的数字成为嘶嘶声。犹豫或犯错的玩家将被淘汰出局。 编写一个程序,打印出最后一系列数字,其中可被 X、Y 和两者整除的数字替换为“F”代表嘶嘶声,“B”代表嗡嗡声,“FB”代表嘶嘶声。
输入样本: 你的程序应该接受一个文件作为它的第一个参数。该文件包含多个分隔行;每行包含 3 个以 space 分隔的数字。第一个数字是第一个分隔符 (X),第二个数字是第二个分隔符 (Y),第三个数字是您应该数多远 (N)。您可以假设输入文件的格式正确并且数字是有效的正整数。
例如: 3 5 10 2 7 15
输出样本: 打印出系列 1 到 N,将可被 X 整除的数字替换为“F”,可被 Y 整除的数字替换为“B”,可被两者整除的数字替换为“FB”。由于输入文件包含多组值,您的输出应该每组打印一行。确保打印的每一行中没有尾随的空 space。
1 2 F 4 B F 7 8 F B 1 F 3 F 5 F B F 9 F 11 F 13 FB 15
约束条件:
• 测试用例数≤20
• "X" 在 [1, 20]
范围内• "Y" 在 [1, 20]
范围内• "N" 在 [21, 100]
范围内我不是在找人帮我做这件事,只是帮助我更好地理解我是如何阅读文本文件的。如果这是 "dumb" 问题,我深表歉意。我已经研究了微软的开发网络页面以进行澄清,但这让我更加困惑......谢谢。
标准输出 (stdout) 只是常规的控制台输出;
要向其发送内容,只需执行 Console.WriteLine
。
发送到 stderr Console.Error.WriteLine
,但挑战不需要它。
CodeEval 上的挑战不需要您从 stdin 输入任何内容,您只需从第一个文件中获取文件名Main 方法的参数:
public static void Main(string[] args)
{
var fileContent = File.ReadAllText(args[0]);
}
如果你必须从 stdin 有效地读取,你可以只使用 Console.ReadLine
:
string line;
while ((line = Console.ReadLine()) != null)
{
// Do whatever you need to do with the line variable read from the stdin.
}
或与您提供的代码集成:
using (var reader = new StreamReader(Console.OpenStandardInput()))
{
Console.WriteLine(FizzBuzz.ParseInput(reader));
}
而且,如果您只需要解析文本,还有另一种选择:Console.In