评估字符串的布尔函数
Boolean Function to Evaluate string
我需要构建一个函数来计算 C++ 中的一串数字。数字字符串采用 balanced ternary 形式,表示数字为 -1、0 或 1 才有效。所以函数的重点是检查字符串以确保它是有效的。例如,如果用户输入“-101-11”,则布尔函数将为 return true。或者,如果用户输入“-1012”,则布尔函数将为 return false。这个函数也是一个class的私有成员函数。让我向您展示到目前为止我编写的代码(我知道这是不正确的,但如果有人能帮助我,那就太好了!)它是用 C++ 编写的。
bool BTernary::isTernary(string s)
{
int i;
int l = s.length();
for (i = 0; i < l; i++) {
if (s.at(i) == '-') {
continue;
}
else if (s.at(i) == '0') {
continue;
}
else if (s.at(i) == '1') {
break;
}
return true;
}
return false;
}
我也尝试了一种不同的方法来检查字符串,它看起来像这样:(这是我已经处理了一段时间的测试文件,它编译没有错误。问题是如果它看到'-' 或 '1' 或 '0' 它会自动假定它是真实的,我想我需要逐个字符地评估字符而不是评估整个字符串?
#include <iostream>
#include <string>
using namespace std;
int main()
{
int i;
string s = "0";
for (i = 0; i < s.length(); i++) {
if (s.at(i) == '-' || '0' || '1') {
cout << "True" << endl;
return True;
}
else {
cout << "false" << endl;
return false;
}
}
}
算法很简单,你应该检查 -
后面是否总是跟着 1
并且没有其他字符,只有 0
和 1
bool BTernary::isTernary(string s) {
int l = s.length();
bool minus = false;
for (int i = 0; i < l; i++) {
if (s[i] == '-') {
if (minus) {
return false;
}
minus = true;
} else if (s[i] == '0') {
if (minus) {
return false;
}
} else if (s[i] == '1') {
if (minus) {
minus = false;
}
} else {
return false;
}
}
return !minus;
}
这是 Mihail 建议的精简版:
bool BTernary::isTernary(const std::string& s)
{
bool minus = false;
for (const char c : s)
{
switch (c)
{
case '-':
if (minus) return false;
minus = true;
break;
case '0':
if (minus) return false;
break;
case '1':
if (minus) minus = false;
break;
default:
return false;
}
return !minus;
}
我需要构建一个函数来计算 C++ 中的一串数字。数字字符串采用 balanced ternary 形式,表示数字为 -1、0 或 1 才有效。所以函数的重点是检查字符串以确保它是有效的。例如,如果用户输入“-101-11”,则布尔函数将为 return true。或者,如果用户输入“-1012”,则布尔函数将为 return false。这个函数也是一个class的私有成员函数。让我向您展示到目前为止我编写的代码(我知道这是不正确的,但如果有人能帮助我,那就太好了!)它是用 C++ 编写的。
bool BTernary::isTernary(string s)
{
int i;
int l = s.length();
for (i = 0; i < l; i++) {
if (s.at(i) == '-') {
continue;
}
else if (s.at(i) == '0') {
continue;
}
else if (s.at(i) == '1') {
break;
}
return true;
}
return false;
}
我也尝试了一种不同的方法来检查字符串,它看起来像这样:(这是我已经处理了一段时间的测试文件,它编译没有错误。问题是如果它看到'-' 或 '1' 或 '0' 它会自动假定它是真实的,我想我需要逐个字符地评估字符而不是评估整个字符串?
#include <iostream>
#include <string>
using namespace std;
int main()
{
int i;
string s = "0";
for (i = 0; i < s.length(); i++) {
if (s.at(i) == '-' || '0' || '1') {
cout << "True" << endl;
return True;
}
else {
cout << "false" << endl;
return false;
}
}
}
算法很简单,你应该检查 -
后面是否总是跟着 1
并且没有其他字符,只有 0
和 1
bool BTernary::isTernary(string s) {
int l = s.length();
bool minus = false;
for (int i = 0; i < l; i++) {
if (s[i] == '-') {
if (minus) {
return false;
}
minus = true;
} else if (s[i] == '0') {
if (minus) {
return false;
}
} else if (s[i] == '1') {
if (minus) {
minus = false;
}
} else {
return false;
}
}
return !minus;
}
这是 Mihail 建议的精简版:
bool BTernary::isTernary(const std::string& s)
{
bool minus = false;
for (const char c : s)
{
switch (c)
{
case '-':
if (minus) return false;
minus = true;
break;
case '0':
if (minus) return false;
break;
case '1':
if (minus) minus = false;
break;
default:
return false;
}
return !minus;
}