评估字符串的布尔函数
Posted
技术标签:
【中文标题】评估字符串的布尔函数【英文标题】:Boolean Function to Evaluate string 【发布时间】:2019-10-08 15:25:17 【问题描述】:我需要构建一个在 C++ 中计算一串数字的函数。数字字符串采用balanced ternary 形式,表示数字为-1、0 或1 均有效。所以这个函数的重点是检查字符串以确保它是有效的。例如,如果用户输入“-101-11”,布尔函数将返回 true。或者如果用户输入“-1012”,布尔函数将返回 false。这个函数也是一个类的私有成员函数。让我向您展示到目前为止我编写的代码,(我知道这是不正确的,但如果有人可以帮助我,那就太好了!)它是用 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
;所以continue
语句是错误的(不要忘记检查他的长度 1st)。该代码目前允许-0
。
让我给你看一下我到目前为止的代码,(我知道这是不正确的) - 你有没有努力纠正你自己的逻辑?学习如何编写程序的重点是看你是否能纠正自己的错误。你做了一个尝试,所以用调试器检查你的代码,看看程序在哪里违背了你的计划。
您可能需要考虑使用std::regex
。
if (s.at(i)=='-'||'0'||'1')
-- 这条线的目的是什么?它没有做你认为它做的事情。
【参考方案1】:
这是 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;
【讨论】:
【参考方案2】:算法很简单,你应该检查-
后面是否总是跟着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;
【讨论】:
这段代码急需一个 for-each 循环和一个 switch 语句以上是关于评估字符串的布尔函数的主要内容,如果未能解决你的问题,请参考以下文章