プロジェクトのカウントソートを使用して英数字データベースをソートする必要があります。私は英数字の値が格納されたtxtファイルを持っています。 86K4G9F8124です。 (txtファイルには10000個のランダムなものがあります)。これはビジュアルスタジオ(C#で書かれている)のコードで、while(counts [i] .CompareTo(f)> 0)という行にエラーが表示されます。英数字データに使用されるソートソート?
ここにある:
{
ArrayList Data = new ArrayList();
Stopwatch SW = new Stopwatch();
StreamWriter SWr = new StreamWriter("Time.txt");
int j = 100;
while (j != 10000)
{
ReadData(ref Data, j);
SW.Start();
CountingSort(Data);
SW.Stop();
SWr.WriteLine("{0} {1}", j, SW.ElapsedTicks);
Console.WriteLine(j);
SW.Reset();
j = j + 100;
Data.Clear();
}
SWr.Close();
}
static void CountingSort(ArrayList Data)
{
// O(1)
string max, b;
max = (string)Data[0];
// O(N)
for (int i = 0; i < Data.Count; i++)
{
b = (string)Data[i];
if (b.CompareTo(max) > 0)
{
max = b;
}
}
// Space complexity O(N+K)
string counts = (string)Data[0];
string output =(string)Data[Data.Count - 1];
string c;
// O(N)
for (int i = 0; i < Data.Count; i++)
{
c = (string)Data[i];
counts = c;
}
string d;
string e;
string f = " ";
// O(N+K)
for (int i = 0; i < counts.Length; i++)
{
while (counts[i].CompareTo(f) > 0)
{
d = (string)Data[i];
output= d;
e = (string)Data[i--];
counts = e;
}
}
}
static void ReadData(ref ArrayList data, int Times)
{
StreamReader SR = new StreamReader("Data.txt");
for (int i = 0; i < Times; i++)
{
data.Add(SR.ReadLine());
}
SR.Close();
}
誰かが私を助けることができるしてくださいと私は何をすべきか間違って、うまくいけばつもりだところを教えてください。ありがとう!
エラーは何ですか? 'counts'は文字列です。インデックスを付けると、そのインデックスの文字が返されるため、互換性のない型を比較している可能性があります。 C#は静的に型付けされ、fは文字列、countsは文字列、counts [i]はchar型、厳密な型システムを持つため、 'char == string'はC#では使用できません。 – evanmcdonnal
@evanmcdonnalエラー:mscorlib.dllで 'System.ArgumentException'の未処理の例外が発生しました 何を意味するのか分かりますが、英数字データのソートカウントはどうすればできますか?ありがとう –
このメソッドを呼び出しているので、引数の例外が発生しています。 https://msdn.microsoft.com/en-us/library/bhh2bx3h(v=vs.110).aspx(または引数として 'object'を受け入れる他のバージョン)ではなく、文字列を渡します。等価演算子( '==')を使用した場合、コンパイラエラーが発生しますが、メソッドがオブジェクト型を受け入れるオーバーロードを持っているため、そのメソッドを呼び出そうとします。私はその問題を少なくとも修正するマイナーチェンジで回答を投稿しますが、あなたのロジックにはまだ他の問題があるかもしれません。 – evanmcdonnal