2012-10-22 90 views
3

說我有這樣的:的Qt的sscanf等效

QString mystring = "67 49 213 59"; 
int a, b, c, d; 

有一個Qt的替代sscanf的,所以我可以閱讀數字到int變量?

+0

假設你可以使用Boost,那麼就有這樣一個詞彙轉換,就是將字符串轉換爲整數或其他數字格式。它會要求你將你的字符串分解成單獨的值,但這不應該太難 – thecoshman

+2

我只是不想將Qt代碼與boost,stdio或std混合。樣式完全不同,此外,Qt是一個相當完整的庫。我認爲它通常能夠在功能方面完全取代C和C++運行時。 – sashoalm

+0

你需要什麼?您可以將QString轉換爲C字符串,例如使用QString :: toLocal8Bit()並將其提供給sscanf? –

回答

4

QTextStream提供了相當於標準庫的流。 不要忘記,文本流應該銷燬之前的這個字符串。

QString mystring = "67 49 213 59"; 
QTextStream myteststream(&mystring); 
int a = 0, b = 0, c = 0, d = 0; 
myteststream >> a >> b >> c >> d; 
+3

+1:雖然它可能更值得一提,這是相當於iostreams,而不是「sscanf」。 –

4
int a, b, c, d; 
QString s("67 49 213 59"); 
QTextStream(&s) >> a >> b >> c >> d; 
+0

在第一個例子中,你不能像你正在做的那樣獲得臨時地址。如果你的編譯器允許它,它不應該。 –

+0

@Benjamin Lindley:是的,我在底部添加了正確的語法。海灣合作委員會發出錯誤信號,並警告關於 - 嚴格。但是,如果允許接受語法,我沒有嘗試過。我應該刪除第一行嗎? – CapelliC

2
QString str("67 49 213 59"); 
QStringList list = str.split(" "); 
int a[list.count]; 
for (int i = 0; i < list.count; i++) 
    a[i] = list[i].toInt(); 
+1

一些解釋可能會有幫助 –

+0

-1:沒有任何散文的代碼是有害的。 –

+0

對我來說,這似乎是乾淨的示例代碼,並回答了這個問題。代碼簡單明瞭。 – ChristophK

1

你總是可以只是做

QByteArray oString = mystring.toAscii(); 
const char *pszString = oString.constData(); 

,然後使用sscanf的()爲正常。