可能性のある複製:
。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]);
入力がどれほど整形式であると想定できるかに応じて、いくつかのエラーチェックを追加することができます。
.NET Frameworkには、sscanf
に直接相当するものはありません。
同じ機能を実現する最も簡単な方法は、文字列( 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
メソッドがあります。
正規表現 を使用することもできますが、これらはおそらく、これほど単純なタスクには少々やり過ぎです。
EDIT:sscanf
の使用に本当に不満がある場合は、常にP /からの関数の呼び出しCランタイムライブラリ。このようなもの(おそらく試されていない):
[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]);
}
}
独自のsscanf()
メソッドをC#で作成することは、少し低レベルのコードを作成しても構わないのであれば、それほど難しくありません。
私のバージョンは、記事 A sscanf()Replacement for .NET で確認できます。
from ランタイムルーチンと.NET Frameworkで同等のもの
sscanf、swscanf ==> System.Double.Parse などの解析メソッドを参照してください
したがって、直接同等のものはないと思います。