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

C++ 문자열에서 앞자리 0 제거하는 방법

이 글에서는 C++에서 문자열에 포함된 앞자리 0(선행 0)을 제거하는 방법을 알아봅니다. 실제 개발에서는 "00023054"처럼 숫자 문자열 앞에 불필요한 0이 붙어 있는 경우가 종종 발생합니다. 프로그램을 실행하면 "23054"만 남게 되어, 맨 앞의 모든 0이 깔끔하게 제거됩니다.

입출력 예시

입력: 앞자리 0이 포함된 문자열 "000023500124"
출력: "23500124"

알고리즘

전체 로직은 매우 단순합니다. 다음 네 단계로 구성됩니다.

1단계: 문자열을 입력받는다.
2단계: 앞자리 0의 개수(n)를 센다.
3단계: 문자열 시작 부분에서 n개의 문자를 제거한다.
4단계: 나머지 문자열을 반환한다.

예제 코드

아래 코드는 반복문으로 0이 아닌 첫 번째 문자의 위치를 찾은 뒤, erase() 함수를 사용해 그 앞부분을 잘라내는 방식입니다.

#include<iostream>
using namespace std;

int main() {
    string my_str = "000023500124";
    int num = 0;

    cout << "원본 문자열 :" << my_str << endl;

    // 문자열 앞부분의 0 개수 세기
    while(my_str[num] == '0') {
        num++;
    }

    my_str.erase(0, num); // 인덱스 0부터 num개의 문자 제거

    cout << "0 제거 후 문자열 :" << my_str;
}

실행 결과

원본 문자열 :000023500124
0 제거 후 문자열 :23500124

코드 동작 원리

1. while(my_str[num] == '0') 조건은 문자열을 처음부터 한 글자씩 검사하여, 0이 아닌 첫 번째 문자를 만나면 반복을 멈춥니다.

2. my_str.erase(0, num)은 인덱스 0부터 시작해 num개의 문자를 삭제합니다. 즉, 앞자리 0 전부가 한 번에 제거됩니다.

3. 만약 문자열 전체가 "0000"처럼 0으로만 이루어져 있다면 위 코드는 빈 문자열을 반환할 수 있으므로, 필요하다면 예외 처리를 추가하는 것이 안전합니다.

더 간결한 대안: find_first_not_of 활용

C++ 표준 라이브러리의 find_first_not_of()를 사용하면 같은 작업을 한 줄로 처리할 수도 있습니다.

string removeLeadingZeros(const string& str) {
    size_t pos = str.find_first_not_of('0');
    if (pos == string::npos) return "0"; // 전부 0인 경우
    return str.substr(pos);
}

이 방식은 별도의 반복문 없이 0이 아닌 첫 번째 문자의 위치를 바로 찾아주기 때문에 코드가 더 짧고 가독성이 좋습니다. 상황에 맞는 방법을 선택해 사용하면 됩니다.