在if陈述中处理多重或的更优雅的方法是什么

时间:2018-07-18 17:00:20

标签: c++ arrays for-loop if-statement

我有这段代码可以检查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;
}

所以我现在想知道是否有人可以替代原始代码以使其更优雅?

3 个答案:

答案 0 :(得分:2)

自c ++ 14起,最惯用的方法可能是使用std::string literalstd::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== ' ';
}

尽管有更好的方法来执行此操作,例如传递一个字符数组进行检查,而不是对其进行硬编码。