2013-11-28 55 views
-2
void getFileName(ifstream& inData) 
{ 

string filename; 

cout << "please enter the location of the file you wish to input: " << endl; 
getline(cin, filename); 

inData.open(filename.c_str()); 

if (!inData) 
{cout << "there was an error with the file you entered" << endl; 
exit(0); } 
} 

所以我打開了我的文件,但我需要它讀取未知數量的字符串。
我需要計算這個函數中的這些字符串,然後計算下一個函數中的每個字符。我以前只是做這樣的事情如何使用循環讀取未知數量的字符串,C++

INDATA >> S1 S2 >> >> >> S3 ECT .....

這是用未知的數據我的第一次。我不確定是否需要將它作爲一個大文件讀取,然後返回並計算單詞和字符,或者如果我需要按字符串讀取它。

任何幫助或指導將不勝感激。

回答

1

這裏的一個關鍵問題就是你所說的「下一個功能」。你是否需要讀取所有的字符串,然後在給它所有你讀過的字符串時調用下一個函數?或者你是否需要多次調用下一個函數,每次用你讀過的字符串之一調用它?

如果是前者,則需要將所有字符串保存在向量中,如果是後者則不需要向量。

這裏的矢量版本

vector<string> v; 
string s; 
while (inData >> s) 
    v.push_back(s); // save the string in the vector 
cout << "the count of strings is " << v.size() << '\n'; 
the_next_function(v); 

查看如何the_next_function只調用一次。使用矢量將爲您計算字符串,使用矢量size()方法獲取字符串的數量。

這裏的非向量版本

string s; 
while (inData >> s) 
{ 
    the_next_function(s); 
} 

這次the_next_function被多次調用。

1
while(getline(tmp,inData) != EOF) 
    count++; 
0

這可以通過standard algorithm函數之一輕鬆完成,即std::copy。您可以使用iterator helpers,如std::istream_inserterstd::back_inserter

使用上述將std::string置入std::vector。字數可以通過vector size找到。

+0

認真嗎?這是99%的功課。如果你想他的作業*(只有作業有IO,工作有參數)*明確拼寫「作弊」,給他一個答案。這顯然是他的聯盟。 :) – CodeAngry

+0

@CodeAngry好點,刪除代碼,只有需要的功能/類。 –