C# C 스캔프에 해당



string formatted-input (4)

가능한 중복 :
.NET에 'sscanf ()'와 동일한 기능이 있습니까?

C에서 sscanf는 문자열에서 형식이 잘된 입력을 읽는 좋은 방법입니다.

이 C #을 달성하는 방법.

예를 들어,

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

위 코드는 a에 10을, b에 12를 할당합니다.

어떻게 C #을 사용하여 동일한 달성하기 위해?

https://src-bin.com


Answer #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 메서드가 있습니다.

당신은 또한 정규 표현식 을 사용할 수도 있지만, 아마도 이것과 같은 간단한 작업에 대해서는 약간 과잉이라고 할 수 있습니다.


편집 : 만약 당신이 진정으로 sscanf 를 사용하여 deadset, 당신은 항상 고려할 수있는 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);

Answer #2

C #에는 직접적인 기능이 없습니다. C #에서 동일한 작업이 주어지면 다음과 같이 할 수 있습니다.

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

입력 양식이 얼마나 잘 형성되었는지에 따라 오류 확인을 추가 할 수 있습니다.


Answer #3

나는 시간을 보내는 것을 쓰고있다.

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





formatted-input