我需要帮助编写接受单个参数long i
的方法:
public static string GetWord(long i)
{
string s = "";
//Update s using i
return s;
}
...用于保存ASCII字文件的程序......
public static void main(string[] args)
{
try
{
int First = int.Parse(args[0]);
int Last = int.Parse(args[1])
string Filename = args[2]
for(int i = start; i <= end; i++)
File.AppendLine(Filename, GetWord(i));
Console.WriteLine("Process complete");
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
......使用以下模式。
GetWord(0)
应该是Encoding.ASCII.GetString(new byte[]{ 0 });
GetWord(1)
应该是Encoding.ASCII.GetString(new byte[]{ 1 });
GetWord(2)
应该是Encoding.ASCII.GetString(new byte[]{ 2 });
......等等GetWord(127)
。
GetWord(128)
应该是GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 0 });
GetWord(129)
应该是GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 1 });
GetWord(130)
应该是GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 2 });
......等等GetWord(255)
。
GetWord(256)
应该是GetWord(1) + Encoding.ASCII.GetString(new byte[]{ 0 });
GetWord(257)
应该是GetWord(1) + Encoding.ASCII.GetString(new byte[]{ 1 });
GetWord(258)
应该是GetWord(1) + Encoding.ASCII.GetString(new byte[]{ 2 });
......等等GetWord(16383)
。
GetWord(16384)
应该是GetWord(0) + GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 0 });
GetWord(16385)
应该是GetWord(0) + GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 1 });
GetWord(16386)
应该是GetWord(0) + GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 2 });
写下模式有助于我思考代码。我希望这对每个人都有意义。我想我需要使用递归和模数的混合来使其工作。
答案 0 :(得分:0)
我想出的解决方案如下:
public void AppendFile(string filePath, long firstWord, long lastWord)
{
using (StreamWriter sw = File.AppendText(filePath))
{
for (long i = firstWord; i < lastWord; i++)
{
sw.WriteLine(GetWord(i));
}
}
}
public void AppendFile(string filePath, long lastWord)
{
AppendFile(filePath, 0, lastWord);
}
public void AppendFile(string filePath)
{
AppendFile(filePath, long.MaxValue);
}
public static string GetWord(long i)
{
string s = Encoding.ASCII.GetString(new byte[] { (byte)(i % 128) });
if (i < 128)
return s;
return GetWord(i / 128) + s;
}
以下列方式使用:
AppendFile("words.txt"); // Will most likely fall over or at least take a long time
AppendFile("words.txt", 1000); // This is the method requested
AppendFile("words.txt", 500, 1000); // Extended functionality
注意:我选择不使用史蒂夫的回答算法。我没有使用史蒂夫算法的原因是因为他在完整程序期间依赖于驻留在内存中的完整数组字,这将输出文件限制为可用RAM的数量。我的版本没有此限制,仅限于字符串的最大可能长度。