C ++使用从多个函数

时间:2018-02-07 14:03:38

标签: c++

我是一个真正的C ++ noob,但我必须为学校做这个任务。这项任务涉及我以前从未听说过的管道。

因此,赋值的第一部分是创建一个接收文件的程序,并读取文件包含的字符,空格,单词和行的数量。这就是我现在所拥有的:

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

using namespace std;

int GetCharCount(istream& i);
int GetWhitespaceCount(istream& i);
int GetWordCount(istream& i);
int GetRowCount(istream& i);

int main()
{
    cout << GetCharCount(cin) << endl;
    cout << GetWhitespaceCount(cin) << endl;
    cout << GetWordCount(cin) << endl;
    cout << GetRowCount(cin) << endl;

    return 1;
}

int GetCharCount(istream& i)
{
    char c;
    int count = 0;

    while(cin.get(c))
    {
        count++;
    }

    return count;
}


int GetWhitespaceCount(istream& i)
{
    char c;
    int count = 0;

    while(cin.get(c))
    {
        if(c == ' ' || c == '\t')
            count++;
    }

    return count;
}


int GetWordCount(istream& i)
{
    char c;
    int count = 0;
    bool wasWhitespace = true;

    while(cin.get(c))
    {
        if(isspace(static_cast<unsigned char>(c)))
        {
            wasWhitespace = true;
        }
        else
        {
            if(wasWhitespace)
                count++;

            wasWhitespace = false;
        }
    }

    return count;
}


int GetRowCount(istream& i)
{
    string line;
    int count = 0;

    while(getline(cin, line))
        count++;

    return count;
}

当我在命令行上运行它时:cat inputfile.cpp | ./programReadFile它正确运行所有函数,但仅在其他函数被注释时才运行。当我尝试一个接一个地运行这些函数时,只有第一个给出了正确的结果,之后的每个函数都返回0。看来该文件只能被一个函数正确读取然后被删除(或其他东西)。

这是管道投入使用的地方还是什么?我试图将cin存储到变量中,然后将该变量传递给函数,但我没有让它工作。

1 个答案:

答案 0 :(得分:0)

未调用其他函数的原因是因为第一个函数从流中提取所有字符,而不为其余函数留下任何内容。要解决此问题,请创建std::vector个字符以初始读取文件的所有内容:

std::vector<char> allCharacters;

for (char x; std::cin >> x)
{
    allCharacters.push_back(x);
}

接下来,修改所有函数以接受vector,而不是istream,并迭代容器中的所有字符以检查您想要的任何条件。在这种情况下你可以使用std::string,但我个人认为vector在这里更有意义,并提供更大的灵活性。