2015-01-08 3 views
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; 
} 

«са» является массив строк, «строка», очевидно, является массив символов.

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

+2

Знаете ли вы, что функция 'strcmp/strcmpi'? – i486

+0

why 'if (str_arr [i] [j]> str_arr [i] [j + 1])'? когда вы хотите найти максимальное значение, которое вам нужно сравнить с текущим максимумом –

+2

Это похоже на чистый вопрос C. Почему тег 'C++'? – Angew

ответ

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; 
} 
Смежные вопросы