string
現在のものより辞書式に大きいaの最小の順列を見つけるための簡単なプログラムを作成しました。しかし、コンパイラはエラーを出します
ERROR CS1003 Syntax error, ':' expected* ".
私はVS2015(アップデート3)を使用していますが、このプログラムをコンパイルするたびに(文法的に正しいようです)、前述のエラーが発生します。
このプログラムの構文エラーはありますか?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
static void Main(string[] args)
{
const string a = "ABCDEFG";
//var u = FFG(a);
//var t = int.Parse(Console.ReadLine());
//for (int i = 0; i < t; i++)
//{
// Console.WriteLine(FFG(Console.ReadLine()));
//}
string u2 = a;
string u = a;
do
{
//***The follownig line meets Error***
Console.WriteLine(u + $"{String.Compare(u, u2) > 0 ? true:false}");
} while ((u = FFG(u)) != "no answer");
Console.ReadLine();
}
static string FFG(string ss)
{
var s = ss.ToCharArray();
int i = s.Length - 1;
while (i >= 1 && s[i] <= s[(i--) - 1])
{ }
if (i == 0 && s[0] >= s[1])
return "no answer";
int j = s.Length - 1;
while (s[i] >= s[(j--)])
{ }
j++;
swap(s, i, j);
int t = i + 1, tt = s.Length - 1;
if (j - i >= 2)
while (t < tt)
{
//if (t == j)
// t++;
//if (tt == j)
// tt--;
swap(s, t, tt);
t++; tt--;
}
return new string(s);
}
static void swap<T>(T[] array, int i, int j)
{
T k = array[i];
array[i] = array[j]; array[j] = k;
}
}
これはコンパイラのバグではありません。問題は、あなたが持っている補間された文字列フォーマットです:
$"{String.Compare(u, u2) > 0 ? true:false}"
条件式は、内にあるため、括弧で囲む必要があり:
ます。通常、の:
後にフォーマット式が続きますが、この場合はありません。
代わりにこれを使用してみてください:
$"{(String.Compare(u, u2) > 0 ? true:false)}"
MSDNから(私の強調):
補間された文字列式は$で始まるため、含まれている補間式内で引用符を引用する必要はありません。コンパイラは、コンマ、コロン、または閉じ中括弧が見つかるまで、含まれている補間式をバランスの取れたテキストとしてスキャンします。同じ理由で、最後の例では括弧を使用して、条件式(p.Age == 1? "": "s")を、コロンでフォーマット指定を開始せずに補間式内に含めることができます。
私の意見では、ここで補間された文字列を使用する必要はありません。文字列比較の結果はデバッグに役立つ可能性があるため、文字列から移動します。さらに、Console.WriteLine
フォーマット文字列とトークンを受け入れるためにすでにオーバーロードされているため、コンソールの出力ロジックを次のように変更します。
do
{
var comparisonResult = string.Compare(u, u2) > 0;
Console.WriteLine("{0} {1}", u, comparisonResult);
} ...
あなたが.ToLower()
本当にケーシングを気にかけているなら、あなたもそうすることができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加