运行程序时,我一直收到分段错误错误。我不知道有什么不对。我用Google搜索了错误信息,我只是不知道这意味着什么。任何帮助都会很棒!
#include<iostream>
#include <stack>
using namespace std;
bool delimiterMatching(char *file){
stack<char> x;
int count = 0;
char ch, onTop, check;
while(ch != '/n'){
ch = file[count];
if (ch == '(' || '[' || '{')
x.push(ch);
else if (ch == ')' || ']' || '}') {
onTop == x.top();
x.pop();
if((ch==')' && onTop!='(') || (ch==']' && onTop!='[') || (ch=='}' &&
onTop!= '{'))
return false;
}
count++;
}
if (x.empty())
return true;
else
return false;
}
int main()
{
char test[50];
cout << "enter sentence: ";
cin >> test;
if (delimiterMatching(test))
cout << "success" << endl;
else
cout << "error" << endl;
return 1;
}
答案 0 :(得分:2)
分段错误意味着您的程序试图访问无效的内存地址。通常,它意味着您取消引用悬空指针或索引到数组末尾。
在这种情况下,问题似乎是您的while(ch != '/n')
行。它有两个问题:
'/n'
不是有效的字符文字。您可能需要'\n'
,它代表一个换行符。cin >> test
读取一行并在最后丢弃换行符。你的循环将超过数组的末尾并进入内存中的任何内容,尝试查找换行符,最终它将到达无法访问的位置,从而导致分段错误。您应该检查'\0'
,这是实际标记字符串结尾的空字符。当我将ch != '/n'
更改为ch != '\0'
时,程序不会崩溃。
顺便说一句,使用std::string
而不是char[50]
会更容易,更安全。
答案 1 :(得分:1)
您无法使用此类比较
if (ch == '(' || '[' || '{')
尝试
if (ch == '(' || ch== '[' || ch=='{')