money - C#equivalente de C sscanf
string.format c# number (5)
Posible duplicado:
¿Hay un equivalente a ''sscanf ()'' en .NET?
sscanf en C es una buena forma de leer una entrada bien formateada de una cadena.
Cómo lograr este C #.
Por ejemplo,
int a,b;
char *str= "10 12";
sscanf(str,"%d %d",&a,&b);
El código anterior asignará 10 aa y 12 a b.
¿Cómo lograr lo mismo usando C #?
Escribir su propio método sscanf()
en C # no es tan difícil, si no le importa escribir un pequeño código de bajo nivel.
Puedes ver mi versión en el artículo A sscanf () Replacement for .NET .
No hay equivalente directo en C #. Dada la misma tarea en C #, podrías hacer algo como esto:
string str = "10 12";
var parts = str.Split('' '');
int a = Convert.ToInt32(parts[0]);
int b = Convert.ToInt32(parts[1]);
Dependiendo de qué tan bien formado pueda asumir que es la entrada, es posible que desee agregar algunas verificaciones de error.
No hay un equivalente directo de sscanf
en .NET Framework.
La forma más sencilla de lograr la misma funcionalidad es dividir la cadena ( String.Split
) y luego asignar las partes posteriores a las variables con el método Int32.Parse
. Por ejemplo:
string myString = "10, 12";
string[] stringValues = myString.Split(new char[] {'' ''}, StringSplitOptions.RemoveEmptyEntries);
int a = Int32.Parse(stringValues[0]);
int b = Int32.Parse(stringValues[1]);
Muchos tipos de datos diferentes en el Marco tienen métodos Parse
, incluidas las enumeraciones, si los valores que desea leer de la cadena no son necesariamente valores enteros.
También puedes usar expresiones regulares , pero probablemente son un poco excesivas para una tarea tan simple como esta.
EDITAR: Si realmente no tiene tiempo de usar sscanf
, siempre puede considerar P / Invocar la función desde las bibliotecas de tiempo de ejecución de C. Algo como esto quizás (no probado):
[DllImport("msvcrt.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern int sscanf(string buffer, string format, ref int arg0, ref int arg1);
Solo escribo para matar el tiempo.
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]);
}
}
de rutinas de tiempo de ejecución y equivalentes de .NET Framework
sscanf, swscanf ==> Ver métodos de análisis, como System.Double.Parse
Entonces, supongo que no hay un equivalente directo.