C#相当于C sscanf

Sha*_*fiz 25 c c# string formatted-input

可能重复:
.NET中有'sscanf()'吗?

C中的sscanf是从字符串中读取格式良好的输入的好方法.

如何实现这个C#.

例如,

int a,b;
char *str= "10 12";
sscanf(str,"%d %d",&a,&b);
Run Code Online (Sandbox Code Playgroud)

上面的代码将10分配给a和12分配给b.

如何使用C#实现相同的目标?

dri*_*iis 15

C#中没有直接的等价物.鉴于C#中的相同任务,您可以这样做:

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

根据您可以假设输入的格式,您可能需要添加一些错误检查.

  • @Doug,我很清楚sscanf与`Split`是一个不同的野兽,因此我从"没有直接的等价物"开始回答 - >然后我举例说明OP提到的具体任务如何可以用C#完成. (9认同)
  • 我已经知道这项技术了.如果在C#中使用类似sscanf的东西会很不错. (2认同)
  • downvote; 这是一个荒谬的答案.sscanf比简单地拆分共同的分隔符要复杂得多.例如,"%d%3s%d"应将"123abc567"解析为123,abc,567,这是拆分无法使用的内容. (2认同)

Cod*_*ray 10

sscanf.NET Framework中没有直接的等价物.

实现相同功能的最简单方法是拆分string(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]);
Run Code Online (Sandbox Code Playgroud)

Parse如果要从字符串中读取的值不一定是整数值,则Framework中的许多不同数据类型都有方法,包括枚举.

你也可以使用正则表达式,但对于像这样简单的任务来说,它们可能有点过分.


编辑:如果你在使用时真的死机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);
Run Code Online (Sandbox Code Playgroud)


Che*_*hen 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]);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 或者只是因为它只是sscanf功能的一部分;-) (3认同)

Jon*_*ood 7

sscanf()如果您不介意编写一些低级代码,那么在C#中编写自己的方法并不困难.

您可以在文章A sscanf()Replacement for .NET中看到我的版本.