我试图通过使用2个向量来存储和更新堆栈中的指针,将元音和辅音排列在链表中。然而,在下面的代码片段中没有一个cout在工作,我哪里出错了?甚至主要的cout都在安排函数调用之前,那也没有显示。
using namespace std;
bool r(char a,char b)
{
return a>b;
}
struct node{
char a;
struct node* next;
};
struct node* head;
void push(char data)
{
node* temp=new node;
temp->a=data;
if(head==NULL)
{
head=temp;
temp->next=NULL;
}
else
{
temp->next=head;
head=temp;
}
}
void arrange()
{
vector<node*> q1;
vector<node*> q2;
node* temp=head;
while(temp!=NULL)
{
if(temp->a=='a'||temp->a=='e')
q1.push_back(temp);
else
q2.push_back(temp);
temp=temp->next;
}
head=q1[0];
cout<<head->next->a<<q1.size();
for(int i=0;i<=q1.size();i++)
{
if(i==q1.size())
q1[i]->next=q2[0];
else
q1[i]->next=q1[i+1];
}
for(int i=0;i<=q2.size();i++)
{
if(i==q2.size())
q2[i]->next=NULL;
else
q2[i]->next=q2[i+1];
}
node* t=head;
while(t!=NULL)
{
cout<<t->a;
t=t->next;
}
}
int main()
{
head=NULL;
push('a');
push('b');
push('c');
push('d');
push('e');
push('f');
node* temp=head;
while(temp!=NULL)
{
cout<<temp->a;
temp=temp->next;
}
arrange();
return 0;
}
只有当我删除排列函数中的for循环时,cout似乎工作得很好
测试if (cout)
以查看您的cout
是否有问题。如果出现问题,请向cerr
报告。
首先,在arrange()
之前,这段代码在我的笔记本电脑上运行良好,它卡住了一秒钟,然后坏了。
我没有仔细阅读代码,但我疯狂地猜测这是因为您试图访问nullptr
。
至于arrange()
之前输出的不可见性,可能只是因为您没有使用std::cout << std::endl
,它会刷新输出缓冲区,同时输出换行符。std::cout
不会在std::cout
之后立即输出字符,而是将输入放入内置缓冲区。当缓冲区充满时,它会输出所有内容,然后加载其余部分。
您可以参考此了解更多详细信息。(参见下面的段落示例(
通常情况下,当出现错误时,缓冲区也会刷新,这就是当前的情况,也让我有点困惑。