我需要在開始時讀取多行使用特定關鍵字。 我有一個基本問題,我需要一隻手來幫助我。讀取多行,但特別是...有效地解析它們
這裏有類型的輸入:
關鍵字1 0.0 0.0
關鍵字1 1.0 5.0
關鍵字2 10.0
KEYWORD3 0.5
keyword4 6.0
規則是:
包含關鍵字1的行& keyword2應該按照該順序並且在任何其他行之前。含有KEYWORD3 & keyword4
線可以是任何順序
關鍵字1必須被隨後2雙
關鍵字2,3 & 4必須隨後用1雙
在一行包含所有四個關鍵字並緊接着它們的double的行的結尾處,「循環」斷開並且觸發計算。
這裏的來源,我有:
using namespace std;
int main (int argc, const char * argv[]) {
vector<double> arrayInputs;
string line;
double keyword1_first, keyword1_second, keyword4,
keyword3, keyword2;
bool inside_keyword1=false, after_keyword2=false,
keyword4_defined=false, keyword3_defined=false ;
//cin.ignore();
while (getline(cin, line)) {
if (inside_keyword1 && after_keyword2 && keyword3 && keyword4) {
break;
}
else
{
std::istringstream split(line);
std::vector<std::string> tokens;
char split_char = ' ';
for (std::string each; std::getline(split, each, split_char); tokens.push_back(each));
if (tokens.size() > 2)
{
if (tokens[0] != "keyword1") return EXIT_FAILURE; // input format error
else
{
keyword1_first = atof(tokens[1].c_str());
keyword1_second = atof(tokens[2].c_str());
inside_keyword1 = true;
}
}
else
{
if (tokens[0] == "keyword2")
{
if (inside_keyword1)
{
keyword2 = atof(tokens[1].c_str());
after_keyword2 = true;
}
else return EXIT_FAILURE; // cannot define anything else keyword2 after keyword1 definition
}
else if (tokens[0] == "keyword3")
{
if (inside_keyword1 && after_keyword2)
{
keyword3 = atof(tokens[1].c_str());
keyword3_defined = true;
}
else return EXIT_FAILURE; // cannot define keyword3 outside a keyword1
}
else if (tokens[0] == "keyword4")
{
if (inside_keyword1 && after_keyword2)
{
keyword4 = atof(tokens[1].c_str());
keyword4_defined = true;
}
else return EXIT_FAILURE; // cannot define keyword4 outside a keyword1
}
}
}
}
// Calculation
// output
return EXIT_SUCCESS;
}
我的問題是:有沒有更有效的方法去了解這個除了使用布爾在讀/解析循環?
那麼,有什麼問題呢? – Thomas
你定義了你的「問題」(儘可能多的你已經制定了一項任務或任務),並且你提供了源,但是對於你沒有爲我們指出*問題的讀者。你的問題是什麼? – HostileFork
我很抱歉。問題是:它是否存在另一種更有效的方式,而不是在讀/解析循環中使用布爾值? – gluon