2010-10-07 71 views
0
string GetLine() 
{ 
char parameter[26] = {NULL}; 

inFile.getline (parameter,26,' '); 

return parameter; 
} 

現在我的輸入文件的一個例子是這樣的:我錯過了什麼? getline函數的(C++)

〜in.txt〜

BAC BCA(最後一後空間)

〜完文件〜

我必須有空間後,A或否則我的功能得到線路將無法正常工作。有沒有辦法在A之後沒有空間並仍然能夠正常工作?

我有26個,因爲輸入行最多隻能有26個字母。

我需要讓他們分開像我有它,因爲這是我如何使用它:

string in, post; 
in = GetLine(); 
post = GetLine(); 

感謝有這方面的建議,這是程序我還是代碼非常小的塊工作。我只想涵蓋我的基礎,因爲我的教授正在用他自己的輸入文件測試這個程序,我不知道他的輸入文件是否會以空格結束。

+0

我想'inFile'是'fstream'或一個'ifstream'? – 2010-10-07 01:17:39

+0

這個函數的目的是獲得一條線嗎?或得到一個詞?換句話說,你爲什麼將分隔符設置爲''? – 2010-10-07 01:28:00

+0

該空間設置它停止閱讀(獲取)該行。所以在我的兩個GetLine調用在=「BAC」和後=「BCA」 – MSwezey 2010-10-07 01:34:29

回答

3

這是一種愚蠢的冗餘功能的,我不知道你爲什麼會稱之爲「函數getline」,但在這裏亞去:

string GetLine() 
{ 
    string s; 
    infile >> s; 
    return s; 
} 
+0

這沒有得到一條線,它得到一個字符串,直到一些空白。也就是說,給定「ABC DEF \ n」,這將返回「ABC」。 – GManNickG 2010-10-07 01:49:46

+0

@GMan是的,我知道。如果你閱讀他的問題和他的評論,你會發現這正是他所要求的。 – 2010-10-07 01:51:10

+0

好吧,我真誠地剔除了這個問題,因此我取消了-1。 :) – GManNickG 2010-10-07 01:57:27

0

如果你知道inpost將具有相同的長度,那麼這裏是一個解決方案:

給函數getline()的燒焦參數,說DELIM,確定分隔符。

string GetLine(char delim=' ') 

而且有它在,則對getline調用中使用:

inFile.getline (parameter,26,delim); 

然後讀取線是這樣的:

string in, post; 
in = GetLine(' '); 
post = GetLine('\n'); 

編輯:

如果你不這樣做知道他們是否會在最後的空間,使用這個:

string GetLine() 
{ 
char parameter[26] = {NULL}; 

inFile.getline (parameter,26,' '); 

string str = parameter; 

if (str[str.length()-1]==' ') str.resize(str.length()-1); 

return str; 
} 
+0

它的工作原理...但只有在沒有空間後...對不起,但我應該是更具體的我猜。我希望它在最後可以使用或不使用空間,只是爲了安全 – MSwezey 2010-10-07 01:31:10

2

也許你應該得到允許\ n作爲分隔符的行,然後迭代並用空格標記輸入。

這樣的事情是一個更聰明的方式做到這一點:

ifstream file(filename); 
string line; 
if (file) 
{ 
    string token; 
    stringstream iss; 
    while (getline(file, line)) 
    { 
     iss << line; 
     while (getline(iss, token, ' ')) 
     { 
      cout << token << endl; 
     } 
     iss.clear(); 
    } 
} 

的EOF和函數getline不相處非常好,所以我就一個簡單的解析工作時幾個學期前發現這個在線問題。

+0

您應該至少提供參考 - http://www.daniweb.com/forums/thread53349.html 代碼完全相同。 – 2010-10-07 02:04:44

+0

我確實說過我在幾個學期前發現它。我不記得在哪裏,在我的電腦上比在網上更容易找到。 – iand675 2010-10-07 18:17:10