我有这段代码可以检查char数组中的每个char是否满足一定数量的属性: *是一个数字 *或为(+,-,*,/)
bool chkArray(char input[]) {
for (auto x = 0; x < strlen(input); x++) {
if (isdigit(input[x]) || input[x] == '+' || input[x] == '-' || input[x] == '*' || input[x] == '/' || input[x] == ' ') {
continue;
}
else {
return false;
}
}
return true;
}
我觉得有一种更优雅的方式来处理检查(+,-,*,/)的倍数或。像这样:
bool chkArray(char input[]) {
for (auto x = 0; x < strlen(input); x++) {
if (isdigit(input[x]) || input[x] == '+', '-', '*', '/', ' ') {
continue;
}
else {
return false;
}
}
return true;
}
所以我现在想知道是否有人可以替代原始代码以使其更优雅?
答案 0 :(得分:2)
自c ++ 14起,最惯用的方法可能是使用std::string
literal和std::string::find()
函数:
#include <iostream>
#include <iomanip>
#include <string>
#include <cctype>
using namespace std::literals::string_literals;
int main()
{
std::string input = "Hello world5!"s;
for(auto c : input) {
std::cout << std::boolalpha
<< (std::isdigit(c) || "+-*/ "s.find(c) != std::string::npos)
<< '\n';
}
}
输出:
false false false false false true false false false false false true false
查看有效的example。
答案 1 :(得分:1)
过去的解决方案是使用std::strchr
:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Change top, bottom, left and right values to change the borders
as you like, this configuration is for top/left border-->
<item android:top="-1dp" android:left="-1dp">
<shape android:shape="rectangle">
<stroke
android:width="1dip"
android:color="@android:color/holo_blue_bright" />
</shape>
</item>
</layer-list>
答案 2 :(得分:0)
Id建议创建一个函数,以检查它是否为您想要的值之一,并让其返回布尔值 像
bool Contains(char in)
{
return in=='+' || in =='-' || in == '*' || in == '/' || in== ' ';
}
尽管有更好的方法来执行此操作,例如传递一个字符数组进行检查,而不是对其进行硬编码。