2012-12-06 28 views
0

我已經通過一些線程詳細介紹瞭如何標記字符串,但我顯然太厚以至於無法將其建議和解決方案調整到我的程序中。我試圖做的是將大行(5k +)行文件中的每行標記爲兩個字符串。這裏的線樣本:使用變量空白符號化字符串

   0  -0.11639404 
    9.0702948e-05 0.00012207031 
    0.0001814059  0.051849365 
    0.00027210884  0.062103271 
    0.00036281179  0.034423828 
    0.00045351474  0.035125732 

我臺詞,來自其他線程的其他樣本輸入之間尋找不同的是,我有空白的,我要來標記部分之間的可變量。無論如何,這是我的嘗試在分詞:

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <string> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    ifstream input; 
    ofstream output; 
    string temp2; 
    string temp3; 

    input.open(argv[1]); 
    output.open(argv[2]); 
    if (input.is_open()) 
    { 
     while (!input.eof()) 
      { 
       getline(input, temp2, ' '); 
       while (!isspace(temp2[0])) getline(input, temp2, ' '); 
       getline (input, temp3, '\n');    
      } 
      input.close(); 
      cout << temp2 << endl; 
      cout << temp3 << endl; 
    return 0; 
} 

我已經修剪它一些,因爲麻煩的位在這裏。我遇到的問題是temp2從來沒有看到價值。理想情況下,它應該填充第一列數字,但它不會。相反,它是空白的,temp3填充整行。不幸的是,在我的課程中,我們還沒有學習矢量,所以我不太清楚如何在其他解決方案中實現它們,我已經看到了,並且我不想將代碼複製粘貼到讓事情沒有真正理解它的工作。那麼,我錯過了什麼是非常明顯的/已經得到解答/簡單的解決方案?我想堅持g ++使用的標準庫,如果可能的話。

+1

任何理由'而(輸入>> TEMP2 >> TEMP3)'將無法正常工作? – chris

+0

cin >>和無論哪個輸入>>忽略所有空格,製表符等 – fersarr

+0

我認爲原因是因爲我努力過於簡單時會過度複雜。非常感謝! –

回答

2

在這種情況下,您可以簡單地忽略空白。提取字符串,並提取將自動跳過前導空格,並閱讀的非空白字符的字符串:

int main(int argc, char **argv) { 
    std::ifstream in(argv[1]); 
    std::ofstream out(argv[2]); 

    std::string temp1, temp2; 

    while (in >> temp1 >> temp2) 
     ; 
    std::cout << temp1 << "\n" << temp2; 
    return 0; 
} 
+0

你可能想把這個cout放在while循環體內,以顯示每行讀取 – dchhetri

+0

感謝您的幫助。假設複雜的事情是我今晚的特長。 –