检查字符串是否包含有效的后缀表达式
Check if a string contains a valid postfix expression
我有一个字符串需要检查其后缀表达式是否有效。
有效的后缀字符串是 1 2 + 但不是 1 2+,因为每个字符都需要一个 space。此外,由于它是一个字符串,您可以输入单词,但对于此函数,它们应该 return -1 。
我已经尝试使用带有字符串的向量数组并检查有效的整数,但是当用户输入字母时,这显然会产生问题。
string postfix = "1 2 +"; // valid
string postfix = "soemthing"; // error
string postfix = "1 2+" ; // error since there is no space.
if (!isdigit(postfix[0]))
return -1;
int t;
string line = "55 124 4 5";
std::vector <int> ints;
std::istringstream iss ( line, std::istringstream::in);
int main() {
while (iss >> t )
{
ints.push_back(t);
}
if (!digit(ints[0]) || !digit(ints[0]))
return -1;
}
~
从this post你可以得到要检查的算法。在 C++ 中:
int isValid(string postfix) {
int l = postfix.size();
char c;
bool numStarted = false;
int counter = 0;
for (int i = 0; i < l; i++) {
c = postfix.at(i);
if (numStarted == true && c == ' ') {
numStarted = false;
} else if (numStarted == false && c == ' ') {
return -1;
} else if (c == '-' || c == '+' || c == '*' || c == '/') {
if (counter < 2 || numStarted) {
return -1;
}
counter--;
numStarted = true;
} else if (!isdigit(c)) {
return -1;
} else if (!numStarted && isdigit(c)) {
counter++;
numStarted = true;
}
}
return (counter == 1 ? 1 : -1);
}
要对此进行测试:
int main(int argc, char** argv) {
string postfix1 = "1 2 +"; // valid
string postfix2 = "soemthing"; // error
string postfix3 = "1 2+"; // error since there is no space.
cout << isValid(postfix1) << endl;
cout << isValid(postfix2) << endl;
cout << isValid(postfix3) << endl;
return 0;
}
输出:
1
-1
-1
我有一个字符串需要检查其后缀表达式是否有效。
有效的后缀字符串是 1 2 + 但不是 1 2+,因为每个字符都需要一个 space。此外,由于它是一个字符串,您可以输入单词,但对于此函数,它们应该 return -1 。
我已经尝试使用带有字符串的向量数组并检查有效的整数,但是当用户输入字母时,这显然会产生问题。
string postfix = "1 2 +"; // valid
string postfix = "soemthing"; // error
string postfix = "1 2+" ; // error since there is no space.
if (!isdigit(postfix[0]))
return -1;
int t;
string line = "55 124 4 5";
std::vector <int> ints;
std::istringstream iss ( line, std::istringstream::in);
int main() {
while (iss >> t )
{
ints.push_back(t);
}
if (!digit(ints[0]) || !digit(ints[0]))
return -1;
}
~
从this post你可以得到要检查的算法。在 C++ 中:
int isValid(string postfix) {
int l = postfix.size();
char c;
bool numStarted = false;
int counter = 0;
for (int i = 0; i < l; i++) {
c = postfix.at(i);
if (numStarted == true && c == ' ') {
numStarted = false;
} else if (numStarted == false && c == ' ') {
return -1;
} else if (c == '-' || c == '+' || c == '*' || c == '/') {
if (counter < 2 || numStarted) {
return -1;
}
counter--;
numStarted = true;
} else if (!isdigit(c)) {
return -1;
} else if (!numStarted && isdigit(c)) {
counter++;
numStarted = true;
}
}
return (counter == 1 ? 1 : -1);
}
要对此进行测试:
int main(int argc, char** argv) {
string postfix1 = "1 2 +"; // valid
string postfix2 = "soemthing"; // error
string postfix3 = "1 2+"; // error since there is no space.
cout << isValid(postfix1) << endl;
cout << isValid(postfix2) << endl;
cout << isValid(postfix3) << endl;
return 0;
}
输出:
1
-1
-1