重複の可能性:
.NETに「sscanf()」に相当するものはありますか?
Cのsscanfは、文字列から適切にフォーマットされた入力を読み取るための優れた方法です。
このC#を実現する方法。
例えば、
int a,b;
char *str= "10 12";
sscanf(str,"%d %d",&a,&b);
上記のコードは、10をaに、12をbに割り当てます。
C#を使用して同じことを達成する方法は?
重複の可能性:
.NETに「sscanf()」に相当するものはありますか?
Cのsscanfは、文字列から適切にフォーマットされた入力を読み取るための優れた方法です。
このC#を実現する方法。
例えば、
int a,b;
char *str= "10 12";
sscanf(str,"%d %d",&a,&b);
上記のコードは、10をaに、12をbに割り当てます。
C#を使用して同じことを達成する方法は?
C# には直接同等のものはありません。C# で同じタスクを指定すると、次のようにすることができます。
string str = "10 12";
var parts = str.Split(' ');
int a = Convert.ToInt32(parts[0]);
int b = Convert.ToInt32(parts[1]);
入力がどの程度整形式であると想定できるかに応じて、いくつかのエラー チェックを追加することをお勧めします。
sscanf
.NET Framework には に直接相当するものはありません。
同じ機能を実現する最も簡単な方法は、文字列 ( String.Split
) を分割し、メソッドを使用して後続の部分を変数に割り当てることInt32.Parse
です。例えば:
string myString = "10, 12";
string[] stringValues = myString.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
int a = Int32.Parse(stringValues[0]);
int b = Int32.Parse(stringValues[1]);
フレームワークのさまざまなデータ型にはParse
、文字列から読み取る値が必ずしも整数値ではない場合、列挙型を含むメソッドがあります。
正規表現を使用することもできますが、このような単純なタスクにはおそらく少しやり過ぎです。
編集:sscanf
を使用することに本当に行き詰まっている場合は、C ランタイム ライブラリから関数を P/ Invokingすることを常に検討できます。おそらくこのようなもの(テストされていません):
[DllImport("msvcrt.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern int sscanf(string buffer, string format, ref int arg0, ref int arg1);
暇つぶしに書いてるだけ。
public static unsafe void Main(string[] args)
{
int a, b,c;
string str = "10 12 100";
sscanf(str, ' ', &a, &b, &c);
Console.WriteLine("{0} {1} {2}", a, b, c);
Console.Read();
}
public static unsafe void sscanf(string str, char seperator, params int*[] targets)
{
var parts = str.Split(seperator);
if (parts.Length != targets.Length) throw new ArgumentException();
for (int i = 0; i < parts.Length; i++)
{
*targets[i] = int.Parse(parts[i]);
}
}
C# で独自のsscanf()
メソッドを作成することは、少し低レベルのコードを書くことを気にしないのであれば、それほど難しくありません。
私のバージョンは、記事A sscanf() Replacement for .NETで確認できます。
ランタイム ルーチンおよび .NET Framework の同等物から
sscanf, swscanf ==> System.Double.Parseなどの Parse メソッドを参照
だから、直接同等のものはないと思います。