Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 문자열 길이에 따라 문자열 배열 정렬하는 방법

이 글에서는 문자열 목록을 길이를 기준으로 정렬하는 방법을 알아보겠습니다. 즉, 문자 수가 적은 문자열일수록 앞쪽에 배치되고, 더 긴 문자열들은 그 뒤에 배치됩니다.

예를 들어 다음과 같은 문자열 배열이 있다고 가정해 보겠습니다.

str_list = {"Hello", "ABC", "Programming", "Length", "Population"}

정렬 후에는 다음과 같이 변경됩니다.

str_list = {"ABC", "Hello", "Length", "Population", "Programming"}

정렬 원리

C++ STL의 sort() 함수는 기본적으로 사전순(알파벳 순)으로 요소를 정렬합니다. 하지만 세 번째 인자로 사용자 정의 비교 함수(comparator)를 전달하면 원하는 기준으로 정렬할 수 있습니다. 여기서는 두 문자열의 길이를 비교하여, 첫 번째 문자열이 더 짧으면 참을 반환하는 비교 로직을 직접 작성하겠습니다.

비교 함수 의사 코드

compare(str1, str2):
시작
    만약 str1의 길이 < str2의 길이라면
        1 반환
    0 반환
끝

구현 예제

아래는 위의 비교 로직을 실제 C++ 코드로 구현한 예제입니다. compare 함수를 sort() 함수에 전달하여 문자열 배열을 길이 오름차순으로 정렬합니다.

#include<iostream>
#include<algorithm>
using namespace std;

int compare(string str1, string str2){
    if(str1.length() < str2.length())
        return 1;
    return 0;
}

main(){
    string str_list[] = {"Hello", "ABC", "Programming", "Length", "Population"};
    int n = 5;
    sort(str_list, str_list + n, compare);
    for(int i = 0; i<n; i++){
        cout << str_list[i] << " ";
    }
}

실행 결과

ABC Hello Length Population Programming

추가 팁: 람다 표현식 활용하기

C++11 이상에서는 별도의 함수를 정의하지 않고 람다 표현식(lambda expression)을 사용하여 더 간결하게 작성할 수 있습니다.

sort(str_list, str_list + n,
     [](const string &a, const string &b) {
         return a.length() < b.length();
     });

람다 표현식은 코드의 가독성을 높이고, 비교 로직을 한 곳에 모아 관리하기 때문에 실무에서 널리 사용됩니다. 또한 길이가 같은 문자열들의 순서를 유지하고 싶다면 stable_sort()를 사용하는 것이 좋습니다.