Найти максимум в строке

0

Учитывая массив строк, я должен найти максимум (в лексикографическом смысле) в каждой строке и сделать строку из этого. Я получил эту функцию:

void get_max_string(sa str_arr, int dim, string max_car) {

    int i, j;

    for(i=0; i<dim; i++) {

        for(j = 0 ; j+1 < strlen(str_arr[i]) ; j++) {

            if (str_arr[i][j] > str_arr[i][j+1])

                max_car[i] = str_arr[i][j];
        }
    }
    return;
}

"sa" - это строковый массив, "строка" - это, очевидно, массив символов.

Проблема в том, что он, кажется, игнорирует первый символ. Какая ошибка?

  • 2
    Вы знаете strcmp/strcmpi ?
  • 0
    почему if (str_arr[i][j] > str_arr[i][j+1]) ? когда вы хотите найти максимальное значение, вам нужно сравнить с текущим максимумом
Показать ещё 3 комментария
Теги:
string

2 ответа

0
Лучший ответ

Вот решение, и я стараюсь использовать ваш код. Проблема вашего кода заключается в том, что вы не присваиваете max_arr[i] начальному значению.

void get_max_string(sa str_arr, int dim, string max_car) {

    int i, j;

    for(i=0; i<dim; i++) {
        max_car[i] = str_arr[i][0]; //init max_car[i] with the first letter

        for(j = 0 ; j + 1< strlen(str_arr[i]) ; j++) { 

            if (max_car[i] < str_arr[i][j+1])

                max_car[i] = str_arr[i][j+1]; // find a larger value
        }
    }
    return;
}
  • 0
    Это решило проблему!
0

Поскольку вы отметили это c++, я бы использовал c++. Например, как это (не проверено)

string get_max_string(const vector<string>& sa) {
    string res;
    for_each(begin(sa), end(sa), [&res](const string& s){
        res.push_back(*max_element(s.begin(), s.end()));
    });
    return res;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню