我是一个真正的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
存储到变量中,然后将该变量传递给函数,但我没有让它工作。
答案 0 :(得分:0)
未调用其他函数的原因是因为第一个函数从流中提取所有字符,而不为其余函数留下任何内容。要解决此问题,请创建std::vector
个字符以初始读取文件的所有内容:
std::vector<char> allCharacters;
for (char x; std::cin >> x)
{
allCharacters.push_back(x);
}
接下来,修改所有函数以接受vector
,而不是istream
,并迭代容器中的所有字符以检查您想要的任何条件。在这种情况下你可以使用std::string
,但我个人认为vector
在这里更有意义,并提供更大的灵活性。