c ++调用参数对argc,argv []

问题描述 投票:0回答:1

编写程序:

a)编写一个程序,该程序接受调用参数(作为实数)并声明它们是否形成排序的序列(不升序,例如5、5、4、3、1、1或不降序,例如1、1 ,2,3,3,4),b)如果a)点的答案是否定的,则在排序后将此字符串输出到控制台。例如,当我输入控制台编号:8 5 0 9时,它排序很好-> 0 5 8 9但当我输入9以上时数字,例如8 5 0 9 14 13,它排序错误-> 0 14 13 5 8 9.我的代码出了什么问题?

    int main(int argc, char **argv) {
for (int i = 0; i < argc - 1; i++) {
            int pos = i;
            for (int j = i + 1; j < argc; j++) {
                if (argv[j][0] < argv[pos][0]) {
                    pos = j;
                }
            }
            char *tmp = argv[i];
            argv[i] = argv[pos];
            argv[pos] = tmp;

        }
    for (int i=0; i<argc-1 ; i++) {
        cout << argv[i] << " ";
    }
return 0;
    }

以及如何检查它们是否排序?

c++ sorting argv argc
1个回答
0
投票

我认为问题是,您正在尝试比较数字,但实际上您是在比较字符。

if ( argv[j][0] < argv[pos][0] )
            {
                pos = j;
            }

在上面的代码中,您正在比较ASCII表中字符串的第一个字符。因此,如果您比较5 <14->评估为真-实际上它会比较5 <1->评估为假。因此,您得到以下错误输出:0 14 13 5 8 9(ASCII代码中的0 <1 <1 <5 <8 <9 <9)。

要解决此问题,您必须将字符串(命令行参数)解析为整数,然后比较整数。

int number = std::stoi(argv[1]); //converts first string / argument in a integer

现在应该可以解决这个问题。

int* nums = new int[argc - 1];

    //converts strings into integerarray
    for ( int i = 0; i < argc - 1; i++ )
    {
        nums[i] = std::stoi( argv[i + 1] );
    }

    //sorts the array
    std::sort( nums, nums + argc - 1 );

    //prints the array
    for ( int i = 0; i < argc - 1; i++ )
    {
        std::cout << nums[i] << std::endl;
    }
    return 0;

对于排序,我将使用std :: sort或任何预制的。要检查数组是否已排序,还将有预定义的函数。我发现std :: is_sorted例如。您可以使用自己的函数,但是我建议您使用经过良好测试的流行函数,它们会使您的代码不易出错。

bool sortedAsc( int* arr, int len )
{
    for ( int i = 0; i < len; i++ )
    {
        if ( arr[i] > arr[i] + 1 )
            return false;
    }
    return true;
}

bool sortedDesc( int* arr, int len )
{
    for ( int i = 0; i < len; i++ )
    {
        if ( arr[i] < arr[i] + 1 )
            return false;
    }
    return true;
}

在您的代码中致电给

if ( sortedAsc( nums, argc - 1 ) )
    {
        std::cout << "sorted ascending" << std::endl;
    }
    else if ( sortedDesc( nums, argc - 1 ) )
    {
        std::cout << "sorted descending" << std::endl;
    }
© www.soinside.com 2019 - 2024. All rights reserved.