[英]Fixing syntax of number of line reading function
我嘗試過編寫一個程序,該程序可以告訴用戶文本文件中的字符數,單詞數和行數。 我做了一些函數來確定每個數字,但是我還是按值傳遞了它們。 這導致錯誤,因為在讀取了char數之后,它將位於文件末尾,然后為其他兩個輸出零。 現在,我似乎無法重寫函數,以便每次檢查字符,單詞和行時都打開和關閉文件。 有人看到我的錯誤在哪里嗎? 謝謝! (現在只復制並粘貼我的功能之一)。
int num_of_lines(ifstream file)
{
string myfile;
myfile = argv[1];
ifstream l;
l.open(myfile);
int cnt3 = 0;
string str;
while(getline(file, str))cnt3++;
l.close();
return(cnt3);
}
int main(int argc, char **argv)
{
int num_of_char(ifstream file);
string file;
file = argv[1];
if(argc == 1)die("usage: mywc your_file");
ifstream ifs;
ifs.open(file);
if(ifs.is_open())
{
int a, b, c;
a = num_of_lines(ifs);
cout <<"Lines: " << a << endl;
}
else
{
cerr <<"Could not open: " << file << endl;
exit(1);
}
ifs.close();
return(0);
}
除了知道名稱並創建新的ifstream
,沒有其他方法可以“重新打開”文件,但是您可以使用seekg
成員函數設置文件中的讀取位置,並將其設置為0將使下一個讀取操作開始從文件開頭開始。
流無法復制,因此您不能“按值”傳遞它,但必須按引用傳遞。
int num_of_lines(ifstream &file)
{
int count = 0;
string str;
while (getline(file, str)) {
count++;
}
file.seekg(0);
return count;
}
對於完整的問題,我同意Mats Petersson的觀點。 一遍計算字符,行和單詞的次數將比三遍讀取文件的效率高得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.