C++执行期间的类成员函数错误/异常处理



我有一个任务,使用一个公共方法创建一个C++ Tokenizer 类 向量 *获取令牌 ( 空 );

该函数通过 stdin 接收字符串,对字符串进行标记化,并返回大小为 ()=1 或 2 的标记的向量指针。该函数需要在以下情况下抛出错误:当第一个令牌不是字符串时,或者当第一个令牌不是字符串而第二个不是整数时,该函数需要抛出错误:有 0 个令牌,超过 2 个令牌。

Code that calls my function from professor:
//////////////////////
For (int i=0; i <5; i++) {
Tokenizer tok;
Vector<string> *test = tok.GetTokens ();
If (test->size ()==1)  {
cout << "Yay" << endl;
} else {
cout  << "Boo" << endl;
}
///////////////

我已经能够成功完成该程序以进行适当的标记化。我还要通过以下方式打印出错误...然后语句。但是,在我的错误中,cout <<"Yay"或"Boo"仍然打印出来。我需要不打印出此文本,同时仍然允许 for 循环/调用函数继续执行。

有没有办法在我的 GetTokens () 方法中使用带有断言的异常或错误来基本上停止执行、打印我的错误文本、将控制权传回调用函数而不打印出任何其他文本并进入下一个循环循环? ::::编辑::::

My Tokenizer.cpp
///////////////////

'//Constructor
Tokenizer::Tokenizer( void ) { }
//This includes my tokenization with my error/exception handling
vector<string> * Tokenizer::GetTokens() {
string strIN;
cout << "> ";
getline(cin, strIN);
vector<string> *tokens = atokenizer(strIN);
//So with one of my constraints, I need to print an error for 0 tokens
try{
if(tokens->size()!=0) {
return tokens;
} else {
throw tokens;
}
}
catch(vector<string> *error) {
cout << "ERROR!" << endl;
return error;
}
}
//This is my tokenization function which parses by whitespace
vector<string> *Tokenizer::atokenizer(string strIN) {
vector<string> *tokens = new vector<string>();
string token="";
int c=0;
bool whiteSpace=true;
//Iterates thru all chars and tokenizes by " "
for(int i=0; i<strIN.size(); i++) {
//Checks if char==1-0,a-z,etc. or is space=" "
if((strIN[i]>=33) && (strIN[i]<=126)) {
//If char, appends to token
token+=strIN[i];
whiteSpace=false;
}
else if((strIN[i]==32) && (whiteSpace==false)) {
//If space, adds token to tokens
tokens->push_back(token);
token="";
c++;
whiteSpace=true;
}
}
//Adds final token
if(token!="") {
tokens->push_back(token);
}
return tokens;
}'
//////////////////

所以我想出了一种不同的方法来解决我的问题。我无法让任何错误处理或异常工作。相反,我只是回到使用If...然后。。。else 语句使用 cout 进行错误检查,然后我创建了控制打印输出的函数。

void coutOff() {
cout.setstate(std::ios_base::failbit)
}
void coutOn() {
cout.clear();
}

相关内容

  • 没有找到相关文章

最新更新