작성: 2021-01-24 22:57
수정: 2021-02-07 22:31
난이도: Bronze Ⅱ
C
C-string
C에서의 문자열은 char 타입의 배열 중 특수한 것을 문자열이라고 할 수 있다. 문자 배열 중에서 마지막 원소가 널 문자(\0)인 것들은 C가 문자열이라고 인식한다. 예를 들어, "Hello!"라는 문자열이 있다고 하면, 그 구조는 아래와 같을 것이다.
| H | e | l | l | o | ! | NULL |
| 0x48 | 0x65 | 0x6c | 0x6c | 0x6f | 0x21 | 0x00 |
이러한 형태의 문자열을 C-String이라고 부른다.
관련 함수
관련 함수는 <string.h> 헤더에 포함되어있다. 이 중 일부 함수를 정리하면 아래와 같다.
| 함수 | 기능 |
|---|---|
strcpy(s1, s2) |
s1에 s2를 복사 |
strncpy(s1, s2, n) |
s1에 s2의 첫 n문자를 복사 |
strcat(s1, s2) |
s1의 끝에 s2를 덧붙임 |
strncat(s1, s2, n) |
s1의 끝에 s2의 첫 n문자를 덧붙임 |
strcmp(s1, s2) |
s1과 s2를 비교 |
strncmp(s1, s2) |
s1과 s2의 첫 n문자를 비교 |
strlen(s) |
s의 길이를 반환 |
memcpy(p1, p2, n) |
p1의 위치에 p2의 데이터를 n바이트만큼 복사 |
memset(p, val, n) |
p의 위치부터 n바이트만큼 val으로 설정 |
s[n] |
s의 n 위치의 문자 반환 |
C++
문자열 자료형
C++은 <string> 헤더의 string 클래스를 사용한다. string 클래스의 변수/함수 목록을 살펴보면 vector 클래스와 많이 닮았다. 정확히는 vector 클래스의 함수를 모두 가지고 있고(>C++11), 여기에 string만을 위한 함수와 변수가 몇 개 더 있다.
관련 함수
string은 vector<char>이 가진 함수를 모두 가지고 있고, 여기에 추가적으로 문자열만을 위한 함수를 몇 개 가진다. 이 중 일부를 소개하자면 아래와 같다.
| 함수 | 기능 |
|---|---|
s.size(), s.length() |
s의 길이를 반환 |
s.copy() |
s를 char*형 변수로 변환 |
string(s) |
s의 내용을 가진 새로운 string 생성 |
s.append(t), s += t |
s의 뒤에 t를 덧붙임 |
s.substr(x, n), string(s, x, n) |
s의 x 위치부터 n개의 문자를 가진 string 반환 |
s.at(n), s[n] |
s의 n 위치의 문자 반환 |
Java
문자열 타입
Java는 String 클래스가 내장되어있다. 따로 패키지나 클래스를 import할 필요없이 그냥 사용할 수 있다.
관련 메서드
String 클래스는 메서드가 상당히 많다. 여기에서 모두 확인할 수 있다. 그래도 일부 추려보자면 아래와 같다.
| 메서드 | 기능 |
|---|---|
s.charAt(i) |
s의 i 위치의 문자를 반환 |
s.contains(t) |
s 안에 t가 존재하는지 여부를 반환 |
s.equalsIgnoreCase(t) |
s와 t가 부호를 무시하고 같은지 여부를 반환 |
String.format(x, o...) |
포맷 문자열 x에 o...에 해당하는 Object를 대입한 문자열을 반환(C의 printf와 유사) |
s.indexOf(c) |
문자 c가 s의 어느 위치에 있는지 반환 |
String.join(del, s...) |
s의 모든 문자열을 del을 구분자로 하여 하나의 문자열로 합침 |
s.length() |
s의 길이를 반환 |
s.replace(old, new) |
old에 해당하는 문자/문자열을 new로 대체 |
s.replaceAll(re, new) |
re의 정규식에 해당하는 부분문자열을 new로 대체 |
s.split(re) |
re의 정규식에 해당하는 문자열을 기준으로 문자열 분할 |
s.substring(begin, end) |
begin 위치부터 end 위치까지의 substring을 반환 |
s.toUpperCase() / s.toLowerCase() |
s의 모든 알파벳을 대문자/소문자로 변환 |
Python
str
Python의 문자열은 보통 str이라는 타입이라고 불린다. 다른 타입을 문자열로 캐스팅하는 경우 str() 함수를 사용한다.
관련 함수
str은 list와 거의 유사하게 사용가능하고, 여기에 추가적으로 문자열을 위한 함수를 가지고 있다.
| 코드 | 기능 |
|---|---|
str(s) |
s를 문자열로 변환(s.__str()__ 실행) |
s[n] |
s의 n 위치의 문자 반환 |
s[begin:end] |
s의 begin부터 end까지의 substring 반환 |
len(s) |
s의 길이를 반환 |
c in s |
문자 c가 s에 들어있는지 여부를 반환 |
s.join(t) |
문자열 리스트 t의 각 문자열을 s를 구분자로 하여 하나의 문자열로 합침 |
s.replace(old, new, lim) |
s의 old에 해당하는 부분을 new만큼 최대 lim회 대체 |
s.format(o...) |
s의 포맷 문자열에 o...의 객체를 대입한 문자열을 반환 |
s.strip(del) |
s의 양쪽 끝을 자르되, del에 속하는 모든 문자를 자름 |
s.split(del, lim) |
s를 del을 기준으로 최대 lim회 분할 |
s += t |
s 뒤에 t 문자열을 덧붙임 |