Lv 0. 잘라서 배열로 저장하기.

https://school.programmers.co.kr/learn/courses/30/lessons/120913

 

#include <string>
#include <vector>

using namespace std;

vector<string> solution(string str, int n) {
    vector<string> answer;
    for(int i=0; i<str.length();i+=n){
        string tmp="";
        for(int j=0; j<n; j++){
            if(i+j>=str.length()) continue;
            tmp+=str[i+j];
        }
        answer.emplace_back(tmp);
    }
    return answer;
}

위와 같은 코드를 작성하여서 제출하였다. 

이중for문을 만든뒤에, 범위만큼 잘라서 임시 tmp 스트링을 만들어서 해당 스트링을 answer에 넣는 형태로 만들었다. 

이때에 i+j>=str.length(); 인 경우는 문제가 발생하니까 그렇게 되는 범위면 continue로 tmp+=str[i+j]; 을 시행하지 않도록 코드를 작성했다. 

 

다른 사람의 풀이를 찾아보니, substr() 함수를 사용하는 풀이를 발견할 수 있었다. substr() 함수의 경우는 그동안 많이 사용해보지 않아서 생각을 하지 못했는데, 다음에는 이런 형태의 문제를 접하게 되면 substr 함수를 사용해서 풀어보도록 하자. 

#include <string>
#include <vector>

using namespace std;

vector<string> solution(string my_str, int n) {
    vector<string> answer;
    for (int i=0; i<my_str.length(); i+=n){
        answer.push_back(my_str.substr(i,n));
    }
    return answer;
}

맨 위에 내가 작성한 코드처럼 스스로 스트링의 인덱스에 접근하는 형태로 하면 잘못된 인덱스에 접근하지 않도록 신경을 써야하는데, 

substr() 함수를 사용하면 그런식의 고려를 하지 않아도 되는 것으로 보여진다. 그래서 substr() 을 제대로 알고 있다면 substr() 함수를 상요하는것이 훨씬 안전하게 코드를 작성할 수 있는 방법이라고 생각된다. substr() 함수를 적극적으로 활용하자. 

 

C++의 `substr()` 함수는 문자열에서 부분 문자열을 추출하는 데 사용됩니다. 이 함수는 다음과 같은 형식을 가집니다:

```cpp
string substr (size_t pos, size_t len) const;
```

- `pos`: 추출을 시작할 위치를 나타내는 인덱스(0부터 시작).
- `len`: 추출할 부분 문자열의 길이.

`substr()` 함수는 원본 문자열에서 지정된 위치 `pos`에서 시작하여 지정된 길이 `len`만큼의 부분 문자열을 새로운 문자열로 반환합니다. 반환된 부분 문자열은 원본 문자열을 변경하지 않습니다.

예를 들어, 다음과 같이 사용할 수 있습니다:

```cpp
#include <iostream>
#include <string>

int main() {
    std::string original = "Hello, World!";
    std::string sub = original.substr(7, 5); // "World"
    
    std::cout << sub << std::endl;
    
    return 0;
}
```

이 코드에서 `substr(7, 5)`는 원본 문자열에서 7번 인덱스부터 시작하여 5개의 문자를 추출하여 "World"를 반환합니다.

 

  Comments,     Trackbacks