나만의 작은 도서관

[문자열] 일부 문자열 반환 substr(), 문자열 길이 반환 length() 본문

C++/문법 및 메소드(STL)

[문자열] 일부 문자열 반환 substr(), 문자열 길이 반환 length()

pledge24 2023. 6. 25. 23:08

https://www.acmicpc.net/problem/25643

 

 

25643번: 문자열 탑 쌓기

인경이는 $N$개의 문자열을 쌓아서 문자열 탑을 완성하려고 한다. 탑을 완성하기 위해서는 모든 문자열을 한 층에 하나씩 아래에서부터 순서대로 쌓아 올려야 한다. 인경이는 문자열 탑의 꼭대

www.acmicpc.net

 

백준 25643번 문제와 같이 입력받은 문자열의 일부만이 필요한 경우가 있다.

이 때, 문자열의 일부를 반환하는 함수 substr()을 사용하여 원하는 문자열을 얻을 수 있다.

substr()

// pos: 문자의 위치, count: 반환할 문자열의 길이
basic_string substr(size_type pos = 0, size_type count = npos) const;

 

 

문자열의 pos번째 문자부터 count 길이 만큼의 문자열을 반환한다. 만약, count 길이가 문자열보다 길다면, 그 이상을 반환하지않고 문자열의 끝까지만 반환한다.

또한, pos를 입력하지 않으면 기본값인 0이 입력되고, count를 입력하지 않으면 자동으로 pos부터 문자열의 끝까지 반환한다.

 

substr() 함수 예제

#include <iostream>
#include <string>			// string::substr(), string::length()

using namespace std;

int main() {

	string s = "The box is cat";		

	cout << s.length() << endl;			// 길이 14('\n' 제외)
	
	// 전부 생략
	cout << s.substr() << endl;			// The box is cat

	// 문자열 길이 생략
	cout << s.substr(3) << endl;		//  box is cat (빈칸도 문자 취급이다.)

	// 0부터 길이 3 문자열 반환.
	cout << s.substr(0, 3) << endl;		// The	(뒤에 빈칸 없음)

	// 0부터 길이 300 문자열 반환.
	cout << s.substr(0, 300) << endl;	// The box is cat

	// 시작 위치 생략, 길이 300 문자열 반환.
	cout << s.substr(, 300) << endl;	// 오류. 빨간줄 떠요.

	// 시작 위치 300
	cout << s.substr(300) << endl;		// 터미널 오류. 경고 메세지 뜹니다.

	return 0;
}

 

 

 

length()

size_type length() const _GLIBCXX_NOEXCEPT { return _M_string_length; }

 

해당 문자열의 길이를 반환한다. 파라미터가 옵션으로도 존재하지 않기 때문에 선택의 여지없이 전체 문자열의 길이를 반환한다. 

만약, 실수로 파라미터를 넣었다면 아래와 같이 "매칭되는 함수가 없다"며 오류가 발생하게 된다.

 

error: no matching function for call to 'std::__cxx11::basic_string<char>::length(int)'

 

length() 함수 예제

#include <bits/stdc++.h>

#define fastio cin.tie(0)->sync_with_stdio(0)

using namespace std;

int main() {
    fastio;
    string str = "abcde";
    cout << str.length() << '\n';   // 5
    
}