【发布时间】:2014-03-02 19:06:03
【问题描述】:
我在程序运行时遇到错误:
“调试断言失败!...表达式:字符串下标超出范围。”
当我的 if 语句尝试检查字符串中“i”处的字符是否为 isDelimiter() 或 isOperator() 时,这发生在我的 for 循环中。我将 char 'check' 作为属性传递,并且在 cmets 中,我确保 'check' 抓取了正确的字符。我一直在研究这个问题,但我似乎无法解决它。
在底部编辑
string inputLine = "";
string inputString = "";
int main()
{
ifstream input("input.txt");
getline(input, inputLine);
if (input.is_open())
{
while (!input.eof())
{
getline(input, inputLine);
for (int i = 0; i<inputLine.length(); i++)
{
char check = inputLine[i];
//cout << check << "\n"; // test for correct character
if ((inputLine[i] != ' ') || (inputLine[i] != isDelimiter(check)) || (inputLine[i] != isOperator(check)))
{
inputString = inputString + inputLine[i];
//cout << lexer(inputString) << "\n";
//cout << inputString;
} // end if
else
{
cout << lexer(inputString);
if (inputLine[i] == isDelimiter(i))
cout << inputLine[i] + "\tDELIMITER";
if (inputLine[i] == isOperator(i))
cout << inputLine[i] + "\tOPERATOR";
inputString = "";
} // end else
//cout << inputString << "\n";
} // end for
} // end while
//input.close();
}
else cout << "Unable to open file.";
return 0;
}
这里是 isDelimiter() 和 isOperator() 方法。
bool isOperator(char c)
{
if ((inputLine[c] == '+') || (inputLine[c] == '-') || (inputLine[c] == '*') || (inputLine[c] == '/') || (inputLine[c] == '=') || (inputLine[c] == '%') || (inputLine[c] == '<') || (inputLine[c] == '>'))
return true;
else
return false;
}
bool isDelimiter(char c)
{
if ((inputLine[c] == ';') || (inputLine[c] == '(') || (inputLine[c] == ')') || (inputLine[c] == ','))
return true;
else
return false;
}
感谢任何帮助!
编辑::
在再次查看我的代码之后,我意识到了错误,但我还有另一个错误。该运行时错误是因为在我的 isOperator() 和 isDelimiter() 函数中,我正在检查 inputString[c] 而不仅仅是“c”。愚蠢的错误,我知道。然而,虽然不再有错误,但程序仍然跳过检查 isOperator() 和 isDelimiter() 方法,仅在读取到“”时进入 else 语句。为什么它没有进入我的 else 语句中用于运算符和分隔符?
【问题讨论】:
标签: c++ string methods char subscript