2010-08-05 64 views
4

如何在C#中執行此操作?如何在c中執行sscanf#

int a,b,c; 
sscanf(astring,"%d %d %d",&a,&b,&c); 

最小的代碼和依賴關係是可取的,有一些內置的正則表達式的東西?

我使用C#4.0

+0

** sscanf C#中的等價物**
http://msdn.microsoft.com/en-us/magazine/cc188759.aspx – 2010-08-05 04:20:16

+0

使用Regex.Match()。更好地控制字段解析,並減少困擾scanf()的奇怪行爲。 – siride 2010-08-05 04:36:39

回答

5

如果像scannf你願意認爲,用戶將給予完全正確的數據,那麼你可以做以下。

string astring = ...; 
string[] values = astring.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries); 
int a = Int32.Parse(values[0]); 
int b = Int32.Parse(values[1]); 
int c = Int32.Parse(values[2]); 

正則表達式適用於這種情況,但它們有點矯枉過正。該字符串可以很容易地用前面提到的Split方法進行標記。

+0

我認爲StringSplitOptions.RemoveEmptyEntries選項將有效地允許任意數量的空格分隔條目? – matt 2010-08-05 04:44:25

+1

現在只要我們可以做'a,b,c = astring.Split('',...)。選擇(Int32.Parse);' – Gabe 2010-08-05 04:44:32

+0

matt:是的,你是對的。 – Gabe 2010-08-05 04:44:59

0

我能想出的最簡單的事情是這樣的:

var fields = astring.Split(null, StringSplitOptions.RemoveEmptyEntries); 
a = int.Parse(fields[0]); 
b = int.Parse(fields[1]); 
c = int.Parse(fields[2]); 
0

或者,這是相當簡單的在C#編寫自己的sscanf()版本。該語法使其相當容易實現。

我實現了我自己的版本併發布到網上。你可以查看它here