web-dev-qa-db-ja.com

C sscanfに相当するC#

可能性のある複製:
。NETの「sscanf()」に相当するものはありますか?

cのsscanfは、文字列から適切にフォーマットされた入力を読み取るための優れた方法です。

このC#を実現する方法。

例えば、

int a,b;
char *str= "10 12";
sscanf(str,"%d %d",&a,&b);

上記のコードは、10をaに、12をbに割り当てます。

C#を使用して同じことを行う方法は?

26
Shamim Hafiz

C#に直接対応するものはありません。 C#で同じタスクを指定すると、次のように実行できます。

string str = "10 12";
var parts = str.Split(' ');
int a = Convert.ToInt32(parts[0]);
int b = Convert.ToInt32(parts[1]);

入力がどれほど整形式であると想定できるかに応じて、いくつかのエラーチェックを追加することができます。

15
driis

.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);
10
Cody Gray

時間をつぶすために書いています。

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]);
    }
}
9
Cheng Chen

独自のsscanf()メソッドをC#で作成することは、少し低レベルのコードを作成しても構わないのであれば、それほど難しくありません。

私のバージョンは、記事 A sscanf()Replacement for .NET で確認できます。

6
Jonathan Wood

from ランタイムルーチンと.NET Frameworkで同等のもの

sscanf、swscanf ==> System.Double.Parse などの解析メソッドを参照してください

したがって、直接同等のものはないと思います。

1
pmg