我编写了下面的函数,它在遇到空格之前将租船者组合在一起并将每个组保存在一个向量中,一旦遇到空格,它应该寻找另一个组并反复做同样的事情!
到目前为止,我的调试表明if语句中的for循环由于某种原因没有执行。
char const* MathematicaLib::IsThisAnEquation(char const* equation){
// execute PEMDAS here
vector <char const*> SeperatedValues;
char *TempGH = "";
int temp = 0;
int SOG = 0; //start of group
//cout << equation[2] << endl; // used to test whether the funcion is reading the input parameter
for (int j = 0; j < strlen(equation); j++)
{
if (isspace(equation[j])) {
//cout << "processing" << endl; // used to confirm that its reading values until a space is encountered
for (int n = SOG; n < j - 1; n++){
TempGH[temp] = equation[n];
temp++;
SOG = j + 1; //skip charecter
cout << "test"; //this does not print out meaning that the loop dosen't execute
}
temp = 0;
SeperatedValues.push_back(TempGH);
}
}
for (unsigned int p = 0; p < SeperatedValues.size(); p++){ // used for debugging only
cout << SeperatedValues[p] << endl;
cout << "This should be reading the vector contents" << endl;
}
return "";
}// end of IsThisAnEquation
假设我传递给函数的值是“123 1”,也假设参数的第一个字符永远不是空格。这意味着当检测到空格时, n == 0 AND j-1 == 2 (j-1表示字符组的结尾,而n =开始)循环应该使位置0到2(123)中的字符被推入向量,因此j不是== 0或-1。
循环不直接嵌入在第一个for循环下,而是在if语句下,如果if语句中的条件为真,那么这个强制是否应该只执行?而不是遵循嵌入式循环执行的规则?
为什么这个循环没有执行的任何建议?
我一遍又一遍地检查了代码以发现任何逻辑错误,但到目前为止我找不到任何错误!
答案 0 :(得分:0)
我的坏if (isspace(equation[j])
是所有邪恶的根源,这个条件没有得到满足,因为std::cin >> equation
没有注册空格,将其替换为std::getline(std::cin, equation);
设法解决问题, for循环现在执行。
感谢@PaulMcKenzie和@Joachim Pileborg指出修改字符串文字的问题。
对不起,我没有提到我通过std::cin>>
传递了参数!