Как вернуть максимальное значение в строке буквенно-цифровых символов (например,-1A003B3)? - PullRequest
0 голосов
/ 11 октября 2019

Рассмотрим, например, вход 1A003B3. В этом случае программа должна вернуть значение 66, т. Е. Значение ASCII, равное B.

Я пробовал этот способ, но не получил правильный вывод.

for(int d=0;d<str.length();d++)
                    {
                        if(str[d]>max)
                        max=str[d];
                    }

1 Ответ

1 голос
/ 11 октября 2019

Вы можете использовать стандартный алгоритм std::max_element. Например,

#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>

int main() 
{
    std::string s( "1A003B3" );

    auto it = std::max_element( std::begin( s ), std::end( s ),
                                []( char c1, char c2 )
                                {
                                    return ( unsigned char )c1 < ( unsigned char )c2;
                                } );

    std::cout << "The maximum value is " 
              << static_cast<int>( static_cast<unsigned char>( *it ) ) << '\n';

    return 0;
}

Вывод программы:

The maximum value is 66

Что касается вашего фрагмента кода, то он должен выглядеть следующим образом

unsigned char max = ( unsigned char )str[0];

for( std::string::size_type i = 1; i < str.length(); i++ )
{
    if ( max < ( unsigned char )str[i] ) max = ( unsigned char )str[i];
}

И вывести значениеиспользуйте выражение

std::cout << static_cast<int>( max ) << '\n';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...