2012-12-10 86 views
0

我有一個包含類似的信息的行和列的文件:如何將一行輸入分隔爲多個變量?

104857 Big Screen TV 567.95 
573823 Blender   45.25 

我需要將此信息解析成三個獨立的內容,其中包括左邊的識別數字的字符串,包含項目名稱的字符串,和一個包含價格的雙變量。信息總是在相同的列中找到,即按照相同的順序。

我無法完成此操作。即使不從文件中讀取,並只使用一個樣本串,我嘗試只是輸出混亂的爛攤子:

string input = "104857 Big Screen TV 567.95"; 
string tempone = ""; 
string temptwo = input.substr(0,1); 
tempone += temptwo; 
for(int i=1 ; temptwo != " " && i < input.length() ; i++) 
{ 
    temptwo = input.substr(j,j); 
    tempone += temp2; 
} 
cout << tempone; 

我試着調整上面的代碼很長一段時間,但沒有運氣,我可以」現在還沒有其他辦法可以做到這一點。

+0

你可以在文件中進行更改並添加列分隔符像104857 |大屏幕電視| 567.95 ...之後會很容易。 –

+0

沒有不幸的不是。 –

回答

4

您可以使用std::find_first_ofstd::find_last_of找到第一個空格和最後一個空格。你可以使用它來更好地將字符串拆分爲3 - 第一個空格出現在第一個變量之後,最後一個空格出現在第三個變量之前,其間的所有內容都是第二個變量。

+0

做得非常好... –

0

如何以下僞代碼:

string input = "104857 Big Screen TV 567.95"; 
string[] parsed_output = input.split(" "); // split input string with 'space' as delimiter 

// parsed_output[0] = 104857 
// parsed_output[1] = Big 
// parsed_output[2] = Screen 
// parsed_output[3] = TV 
// parsed_output[4] = 567.95 

int id = stringToInt(parsed_output[0]); 
string product = concat(parsed_output[1], parsed_output[2], ... ,parsed_output[length-2]); 
double price = stringToDouble(parsed_output[length-1]); 

我希望,這是明確的。

0

試試打破文件的組件:

  • 你知道一些永遠是第一位的,我們也知道了一些沒有空格。
  • 後的數字可以有空格的字符串,但不會包含任何數字(我假設)
  • 這個標題之後,你將擁有更多的數字(無空格)

從這些組件中,你可以推斷出:

抓取第一個數字就像使用文件流<<讀取一樣簡單。 獲取字符串需要您檢查,直到您到達一個數字,一次抓取一個字符並將其插入到字符串中。最後的數字就像第一個,使用文件流<<

這似乎是功課,所以我會讓你把其餘的一起休息。

0

我會嘗試一個正則表達式的東西沿着這些線路:

^([0-9]+)\s+(.+)\s+([0-9]+\.[0-9]+)$ 

我不是在正則表達式的語法很不錯,但([0-9]+)對應的數字序列(這是id),([0-9]+\.[0-9]+)是浮點數(價格)和(.+)是通過「空格」字符序列與兩個數字分開的字符串:\s+。 下一步將檢查您是否需要使用「.50」或「10」等價格。

相關問題