如何使用堆栈C ++读取文件并以相反顺序打印

时间:2018-07-31 01:16:06

标签: c++ stack file-handling

我必须一次读取文本文件中的每个单词,然后将其推入堆栈,然后一次弹出每个单词以在显示屏中打印。我尝试了以下代码,但是运行该程序后,编译器仅显示空白屏幕,没有错误。 注意: 我不允许使用类或结构或STL来实现堆栈。堆栈必须使用固定大小的单词数组和用于指示堆栈顶部的索引整数来实现

我的文本文件如下:

one two three four five
six seven and so on

输出应为:

no os dna neves xis ...

main.cpp

using namespace std;

char word;
void push(char);
void pop();
void displaywords();

int count = 0;
const int arr_Size=50;
string stack[arr_Size];

int main()
{
    //string word;
    ifstream infile;
    infile.open("data.txt");
    if(!infile)
    {
        cerr << "An error occurred while opening the file.";
        exit(1);
    }

    do
    {
        cin >> word;
        if (infile.fail())
            break;
        cout << word;   
        push(word);     
    }while(infile.eof());
    infile.close();

    while(stack!=NULL) // trying to write code for stack is not null
    {
        displaywords();
        pop();
    }
    return 0;
}

void push(char word)
{
    count = count + 1;
    stack[count] = word;
}

void displaywords()
{
    cout << "PUSHED " << " " << stack[count] << "   ." << endl;
}

void pop()
{
    count = count - 1;
}

3 个答案:

答案 0 :(得分:1)

那是因为您正在尝试从cin中读取。将cin块中的do更改为infile

答案 1 :(得分:1)

您的代码有很多问题。一个明显的例子是读取循环将while(infile.eof())作为其条件。几乎可以肯定这不是您想要的。 while(!infile.eof())可能就是您所想的,但这也不能正确/可靠地起作用。

您也正在打开infile,但是在阅读时,您尝试从cin而不是infile阅读。

您还尝试使用while(stack!=NULL),显然要读取直到堆栈为空,但是stack是一个数组。它永远不会比较等于NULL。

由于您使用的是C ++,因此我将使用标准容器(例如std::vectorstd::deque,带有或不带有std::stack适配器)。这个一般命令上的内容应该更接近一点:

std::vector<std::string> strings;
std::infile("some file.txt");
std::string word;

while (infile >> word)
    strings.push_back(word);

while (!strings.empty()) {
    std::cout << strings.back();
    strings.pop_back();
}

答案 2 :(得分:1)

std :: cin从stdin读取。您不会从流缓冲区中获取任何东西-它正在等待用户输入。