2014-01-31 85 views
0

對於我的項目的一小部分,我應該使用cin從文本文件中提取數據,根據命令行參數我的程序將知道從哪裏讀取數據。我的問題是如何提取四個數據並忽略逗號。例如,.txt文件將如下所示從文本文件讀取數據並忽略其他

(1,2,3,.) 
(2,1,3,#) 
(3,1,0,.) 

在這種情況下,我需要提取1,2,3和。爲第一行。然後移到第二行。當達到空白換行符時,我可以通過while循環退出getline()方案。

我知道我需要使用getline(),並且我可以通過使用由getline()生成的字符串的.at()函數來提取數據。然而,當一個座標如1,2或3可能是兩位數時,我變得很困惑。當發生這種情況時,我以前的算法不起作用,所以我覺得我正在推翻事情,應該有一種更簡單的方法來解析這些數據。

謝謝!

回答

-1

一個簡單的方法是使用sscanf,如果你想解析從頭串傳給你從CIN把它理解爲第一個參數

sscanf(s, "(%d,%d,%d,%c)", &a, &b, &c)) 

字符串,只是專注的格局。

在這種情況下,該模式是

'(', number, ',', number, ',', number, ',', char, ')' 

所以,你可以找到三個逗號,然後簡單地從它們之間抽取三個數字。

更復雜的方法是regex。 但是C++沒有原生支持(Boost庫)

+0

所以對於sscanf我需要s是正確的cstring?我現在很難做getline調用,即時消息不使用字符串 –

+0

@JoshHamet是的。 'char str [size]; cin.getline(str,size);' –

+0

聽起來像是一個家庭作業練習,所以sscanf()可能會被壓制(不是沒有理由,因爲它是不安全類型的本質 - 因爲它已經錯過了接受最終的參數%c令牌)。 –

0

您可以將>>操作符用於虛擬'char'變量來讀取分隔符。這假定你不關心第四個令牌,它總是一個單一的字符:

char ch; 
while (ss >> ch) 
{ 
    int a,b,c; 
    ss >> a >> ch >> b >> ch >> c >> ch >> ch >> ch; 
} 
相關問題