我的程序運行時出現錯誤:
「Debug Assertion Failed!... Expression:string subscript out of range。」表達式:字符串下標超出範圍。屬性傳遞問題?
當我的if語句嘗試檢查字符串'i'中的字符isDelimiter()或isOperator()時,這發生在我的for循環中。我將char'check'作爲屬性傳遞,並且在評論中我確保'check'抓住正確的字符。我一直在處理這個問題一段時間,我似乎無法解決它。
EDITED AT BOTTOM
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語句。爲什麼它不會爲我的運營商和分隔符聲明呢?
在更改函數和傳遞給int的屬性之後,我沒有錯誤,但是我的代碼仍然跳過else語句,它應該在第一個';'被閱讀。 最初我還將屬性作爲字符傳遞給函數,因爲它們是函數中需要檢查的內容('+','%'等),我正確嗎?它怎麼會與int? – Dreiak