C 中的 sscanf 是一种从字符串中读取格式良好的输入的好方法。
如何实现这个 C#。
例如,
int a,b;
char *str= "10 12";
sscanf(str,"%d %d",&a,&b);
上面的代码会将 10 分配给 a,将 12 分配给 b。
如何使用 C# 实现相同的功能?
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]);
根据您可以假设输入的格式如何,您可能需要添加一些错误检查。
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);
我只是为了消磨时间而写作。
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# 中编写自己的方法并不难。