C++ 如何让代码检测多个句点(AKA.)

C++ 如何让代码检测多个句点(AKA.),c++,C++,我正在构建一个算术计算器,我对所有内容都进行了错误检查,但12.34是允许的,但12.3.4不应该是因为有多个。我如何在代码中实现它?我不知道如何停止我寻找的“if”语句,因为它跳过了多个1,而我只想让任何一个合法的十进制数字通过,比如12.34 #include <iostream> #include <cstdlib> #include <time.h> #include <math.h> #include <errno.h>

我正在构建一个算术计算器,我对所有内容都进行了错误检查,但12.34是允许的,但12.3.4不应该是因为有多个。我如何在代码中实现它?我不知道如何停止我寻找的“if”语句,因为它跳过了多个1,而我只想让任何一个合法的十进制数字通过,比如12.34

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <math.h>
#include <errno.h>   


using namespace std;

const double MAXRANGE = pow(2.0, 16.0); // 65536
const double MINRANGE = -pow(2.0, 16.0);

bool validDouble(const char* argument)
{
    return atof(argument);
}

int main(int argc, char* argv[])
{
    

    char z;

    bool isARealDouble = true;
    
    if (argc == 3)
    {
        z = 0;
    }
    else if (argc == 4)
    {
        z = argv[3][0];
    }
    else if (argc < 3)
    {
        cout << "P" << endl;
        return 0;
    }
    else if (argc > 4)
    {
        cout << "P" << endl;
        return 0;
    }

    if ((z == 'a') || (z == 's') || (z == 'm') || (z == 'd') || (z == 'p') || (z == 0))
    {


        if (z == 0)
        {
            float h;
            float x = atof(argv[1]);
            float y = atof(argv[2]);
            if (x <= MINRANGE)
            {
                cout << "R" << endl;
                return 0;
            }
            else if (x >= MAXRANGE)
            {
                cout << "R" << endl;
                return 0;
            }
            if (y <= MINRANGE)
            {
                cout << "R" << endl;
                return 0;
            }
            else if (y >= MAXRANGE)
            {
                cout << "R" << endl;
                return 0;
            }

            for (int i = 1; i < argc; i++)
            {
                isARealDouble = true;

                for (int j = 0; j < strlen(argv[i]); j++)
                {
                
                    cout << argv[i][j] << " ";
                    if (isdigit(argv[i][j]) || argv[i][j] == '.')
                    {   
                        isARealDouble = true;
                                            }
                    else
                    {
                    isARealDouble = false;  
                    cout << "X" << endl;
                    return 0;
                    }
                        
                }
                
                
            }
            if (isARealDouble)
            {
                h = x + y;
                cout << h << endl;
                return 0;
            }
        }

        
    }
    

    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
const double MAXRANGE=pow(2.0,16.0);//65536
const double MINRANGE=-pow(2.0,16.0);
bool validDouble(常量字符*参数)
{
返回atof(参数);
}
int main(int argc,char*argv[])
{
charz;
bool-isarealdoull=true;
如果(argc==3)
{
z=0;
}
else if(argc==4)
{
z=argv[3][0];
}
否则如果(argc<3)
{

无法将C字符串转换为
std::string
并使用
std::count

#include <algorithm>
#include <string>
#include <vector>

int main(int argc, char* argv[]) {

    auto args = std::vector<std::string>{argv, argv + argc};
    for (std::size_t i = 1; i < args.size(); ++i) {
        const auto count = std::count(args[i].begin(), args[i].end(), '.');
        if (count > 1) {
            return EXIT_FAILURE;
        }
    }
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
自动args=std::vector{argv,argv+argc};
对于(std::size_t i=1;i1){
返回退出失败;
}
}
}

<代码>将C字符串转换成<代码> STD::String 并使用<代码> STD::计数< /Cord> >我将如何做,IM新的C++代码,如果是(ISALALILIN),行的代码是什么?<代码> > <代码>条件在评估时总是正确的,因为如果<代码> ISAARALILUT/< C++ >被设置为假,则程序将永远无法达到该行。解决方案您应该在问题中提到它。@下划线\表示我的错误。我传递的参数错误。您是对的。我猜WandBox每行需要一个离散参数,因此将原始的空格分隔参数集视为“一个引用的参数”。@ethanwoodvine:以后,请指定问题中的所有约束。