簡體   English   中英

行號讀取功能的固定語法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM