28

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

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

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

例えば、

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

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

C#を使用して同じことを達成する方法は?

4

5 に答える 5

17

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

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

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

于 2010-11-19T10:10:57.297 に答える
11

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);
于 2010-11-19T10:14:32.350 に答える
9

暇つぶしに書いてるだけ。

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]);
    }
}
于 2010-11-19T10:22:39.470 に答える
7

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

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

于 2012-02-14T19:41:50.210 に答える
1

ランタイム ルーチンおよび .NET Framework の同等物から

sscanf, swscanf ==> System.Double.Parseなどの Parse メソッドを参照

だから、直接同等のものはないと思います。

于 2010-11-19T10:17:05.327 に答える