Сравнительное поведение оператора «<» - PullRequest
2 голосов
/ 28 февраля 2020

Почему это печать «Попеску» вместо «Ионеску», поскольку «Попеску»> «Ионеску»?

#include <iostream>

using namespace std;

int main(){

    char v[3][100] = {"Popescu","Ionescu","Vasilescu"};
    if(v[0]<v[1]){
        cout << v[0];
    }else{
        cout << v[1];
    }
    return 0;
}

Ответы [ 2 ]

5 голосов
/ 28 февраля 2020

Поскольку char[100] не имеет operator<, вы возвращаетесь к operator< для char*. Это было не то, что вы намеревались - он возвращает первый объект в памяти. И v[0] определенно предшествует v[1].

Вы хотите std::string, где operator< перегружен, чтобы делать то, что вы хотите.

1 голос
/ 28 февраля 2020

Ваша инициализация неверна, поэтому выведите «Popescu»

Сначала. Прежде чем начинать работу над программой, вам необходимо выяснить позицию массива, которая является основным критерием, см. Мое изображение

см. Пример ниже:

символ всегда принимает один символ:

#include <iostream>

using namespace std;

int main(){

    char v[3][3] =
    {
     {'p','I','l'},
     {'s','e','r'},
     {'q','w','x'}
    };

    cout<< v[0][0];  //print the array2d 

    return 0;
}

вывод:

p

Первое условие:

#include <iostream>

using namespace std;

int main(){

    char v[3][100] = {"p","I","l"};    

    if(v[0][0]==v[0][0])
    {
        //cout << v[0]; //when uncomment this line output is p
        cout << v[1];  **see here print the i because check the position of array image**
    }
    else 
    {
        cout << v[1];
    }
    return 0;
}

выход: I // теперь положение вашего массива см. Ниже

enter image description here

Теперь второе условие:

int main(){

    char v[3][100] = {"p","I","l"};    

    if(v[1]==v[1])
    {
        // cout << v[0];
        cout << v[1];   
    }
    else
    {
        cout << v[1];
    }
    return 0;

Выход: I

Если вышеприведенные критерии понятны, тогда перейдем к вашей главной проблеме:

#include <iostream>

using namespace std;

int main(){

    char v[3][100] = {"p","I","l"};    

    if(v[0]<=v[1])
    {
        cout << v[0];
        // cout << v[2];
    }
    else
    {
        cout << v[1];
    }
    return 0;
}

вывод: p

Надеюсь, мой ответ понятен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...