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

C++ 문자열에서 모든 정수를 추출하는 방법

이 글에서는 C++에서 문자열에 포함된 모든 정수를 추출하는 방법을 알아보겠습니다. 숫자와 숫자가 아닌 문자가 섞여 있는 문자열이 주어졌을 때, 그 안의 모든 숫자 값을 추출하는 것이 목표입니다.

이 문제를 해결하기 위해 C++의 stringstream 클래스를 활용합니다. 문자열을 단어 단위로 분리한 뒤, 각 단어를 정수형 데이터로 변환을 시도합니다. 변환이 성공하면 해당 단어는 정수이므로 그 값을 출력하면 됩니다.

입력: 숫자가 포함된 문자열 "Hello 112 World 35 75"
출력: 112 35 75

알고리즘

1단계: 숫자가 포함된 문자열을 입력받는다
2단계: 문자열을 여러 개의 단어로 분리한다
3단계: 단어가 정수형으로 변환 가능하면 해당 값을 출력한다
4단계: 종료한다

예제 코드

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

void getNumberFromString(string s) {
    stringstream str_strm;
    str_strm << s; // 문자열 s를 stringstream으로 변환
    string temp_str;
    int temp_int;
    while(!str_strm.eof()) {
        str_strm >> temp_str; // 단어를 하나씩 temp_str에 저장
        if(stringstream(temp_str) >> temp_int) { // 문자열을 int로 변환 시도
            cout << temp_int << " ";
        }
        temp_str = ""; // 임시 문자열 초기화
    }
}

main() {
   string my_str = "Hello 112 World 35 75";
   getNumberFromString(my_str);
}

실행 결과

112 35 75

코드 설명

위 코드의 핵심 동작 원리는 다음과 같습니다.

1. stringstream 변환: 입력받은 문자열을 stringstream 객체에 넣으면, 스트림 연산자(>>)를 사용해 공백을 기준으로 단어를 하나씩 읽어올 수 있습니다.

2. 정수 변환 시도: 각 단어를 새로운 stringstream에 넣어 int 타입 변수로 추출을 시도합니다. 만약 단어가 "112"처럼 숫자로만 이루어져 있다면 변환이 성공하고, 조건문이 참이 되어 값을 출력합니다.

3. 실패 시 무시: "Hello"나 "World"처럼 숫자가 아닌 단어는 변환에 실패하므로 자동으로 건너뛰게 됩니다.

이 방법은 별도의 복잡한 파싱 로직 없이 C++ 표준 라이브러리만으로 간단하게 구현할 수 있다는 장점이 있습니다. 다만 음수(-35 등)나 소수점이 포함된 경우에는 추가적인 처리가 필요할 수 있으니, 실무에서는 입력 형식을 고려하여 코드를 확장하는 것이 좋습니다.