안녕하세요 제타지니입니다. 이번 포스트에서는 String class에 대해서 다루어 보겠습니다.
이 포스트는 [아두이노 상상을 스케치하다 - 허경용 저]에서 참고하였습니다.
이번의 포스트는 아두이노에서 자주 쓰이는 Class 중의 하나인 String 클래스입니다.
String 클래스는 바로.... '문자열'을 다루기 위한 클래스입니다.
아두이노의 기반을 이루는 C++에서는 문자열을 다루기 위한 클래스를 제공하고 있으며, 아두이노 역시 String이라는 클래스를 통해서 문자열을 쉽게 처리할 수 있도록 도와줍니다. (C언어 에서는 문자열을 다루기 위한 데이터형이 별도로 정의되어 있지 않고, 문자 배열을 이용해서 문자열을 처리하지만, 문자 배열로 문자 열을 다루는 것은 많이 번거롭고 많은 주의를 요한다는 것을 알아두세요!)
String 클래스를 사용하는 것은 문자 배열을 사용하는 것과 비교할 때 많은 메모리를 요구하지만, 다양한 작업을 간편하게 처리할 수있는 장점이 있습니다. 따라서, 스케치의 크기가 문제되지 않는다면, String 클래스 사용을 권장합니다.
Serial class에서는 함수를 사용할 때 Serial_ 라는 식을 썼다면, String 클래스 역시 비슷합니다. 함수 앞에 String 형.함수라는 식으로 쓰시면 됩니다. 잘 모르시겠다면 사용 예제를 보시면 됩니다.
하나하나 깊이 읽어보시는 것을 추천합니다.
함수 |
코드 |
의미 |
사용 |
String |
String(val) String(val, base) |
val: 객체를 반환한 값 base: value가 정수인 경우 진법 반환값: 없음 *String 클래스 생성자 *정수, 문자, 문자 배열, String 객체 등 다양한 종류의 데이터형으로부터 String 객체 생성 *정수가 val로 주어진 경우 진법 지정 가능 *base 값은 unsigned char형으로 default 값은 10 *각 진법에 대한 상수가 정의되어 있음 |
String one= "Hello World"; // 문자 배열에 의한 생성 one = String(13, HEX); //정수형에 의한 초기화, 16진법 |
charAt |
char charAt(unsigned int index) |
index: 문자열에서 찾고 싶은 문자의 위치 반환값: 문자열에서 index 위치의 문자 *문자열 내에서 지정한 위치의 문자를 반환 *문자열의 위치는 첫 번째 문자의 index가 0붙너 시작됨/ *연산자 []와 같은 기능 수행 |
String a = "ABCDEF"; String b = a.charAt(2); //a.charAt(2) = a[2] |
compareTo |
int compareTo(const String &string2) |
string2: 비교 대상이 되는 문자열 반환값: 순서상으로 string2가 먼저 나오면 양의 값, 동일하면 0, 뒤에 나오면 음의 값을 반환 *두 개의 문자열을 동일한 위치에 있는 문자 단위로 비교하여 그 결과를 반환 *ASCII 코드 상에서는 숫자, 대문자, 소문자의 순서로 큰 값을 가짐 |
String str1 = "ABC"; String str2 = "DEF"; Serial.println(+str1.compareTo(str2)); // -값이 나옴 |
concat |
unsigned char concat(const String &str) unsigned char concat(int num) |
str: 이어 붙일 문자열 num: 이어 붙일 숫자. 문자열로 변환되어 붙임 반환값: 성공 시 true, 실패시 false 반환 *문자열 뒤에 인자로 주어진 문자열을 이어붙임 *연산자 '+'와 동일한 기능 수행 *이외에도 문자형, long 형 등 매개변수로 받는 여러함수들이 다중 정의 되어 있음 |
String str1 = "ABC"; String str2 = "DEF"; str.concat(str2); Serial.println(str1); //ABCDEF |
endsWith |
unsigned char endsWith(const String &str) |
str: 비교 대상 문자열 반환값: 문자열이 str로 끝나는 경우 true, 아닌 경우 false를 반환 *문자열이 str에 주어진 문자열로 끝나는 지 검사. *끝나면 true, 아니면 false |
String str1 = "ABC"; String str2 = "DABC"; if(str2.endsWith(str1)){} // 항상 true |
equals |
unsigned char equals(const String &str) |
str: 비교 대상 문자열 반환값: 문자열이 str과 동일하면 true, 아니면 false *문자열 str에 주어진 문자열과 동일한지 비교 *동일시 true, 아니면 false *대문자, 소문자를 서로 다른 문자로 간주 |
String str1 = "ABC"; String str2 = "abc"; if(str2.equals(str1)){} // 항상false |
equalsIgnoreCase |
unsigned char equalsIgnoreCase(const String &str) |
str: 비교 대상 문자열 반환값: 문자열이 str과 동일하면 true, 아니면 false *문자열 str에 주어진 문자열과 동일한지 비교 *동일시 true, 아니면 false *대문자, 소문자를 서로 동일한문자로 간주 |
String str1 = "ABC"; String str2 = "abc"; if(str2.equalsIgnoreCase(str1)){} // 항상 true |
getBytes |
void getBytes(unsigned char *buf, unsigned int bufsize) |
buf: 문자들을 복사할 버퍼 bufsize: 버퍼의 크기 반환값: 없음 *String 객체의 문자들을 버퍼로 복사 *복사할 수 있는 최대 문자 개수는 배열에서 문자열로 종료 표시를 위한 공간을 제외한 bufsize - 1 |
String message = "HELLO WORLD"; char bytes[message.length()]; message.getBytes( bytes, message.length() + 1); //문자들을 bytes로 복사 |
indexOf |
int indexOf(char ch) int indexOf(char ch, unsigned int fromIndex) int indexOf(const String &str) int indexOf(const String &str, unsigned int fromIndex) |
ch: 탐색할 문자 str: 탐색할 문자열 fromIndex: 탐색을 시작할 위치 반환값: 검색 문자 또는 문자열이 처음 발견될 위치를 반환, 발견되지 않으면 -1을 반환 *문자열 내에서 주어진 문자나 문자열이 존재하는 지 검사 *첫 번째 발견된 위치를 반환 *존재하지 않을 시 -1 반환 *default: 문자열의 시작부터 검색 *fromIndex 설정하여 시작 위치 지정 가능 |
String str = "ABCDEFG"; String searchStr = "AB"; int index = -1; index = str.indexOf(searchStr, index+1); |
lastIndexOf |
int lastIndexOf(char ch) const int lastIndexOf(char ch, unsigned int fromIndex) const int lastIndexOf(const String &str) const int lastIndexOf(const String &str, unsigned int fromIndex) const |
ch: 탐색할 문자 str: 탐색할 문자열 fromIndex: 탐색을 시작할 위치 반환값: 검색 문자 또는 문자열이 처음 발견될 위치를 반환, 발견되지 않으면 -1을 반환 *문자열 내에서 주어진 문자나 문자열이 존재하는 지 검사 *indexOf와는 다르게 문자열의 끝부터 역방향으로 검색. |
|
length |
unsigned int length(void) |
매개변수:없음 반환값: 문자열의 길이 |
String message = "HELLO WORLD"; char bytes[message.length()]; message.getBytes( bytes, message.length() + 1); //문자들을 bytes로 복사 |
replace |
void replace(char find, char replace) void replace(const String &find, const String &replace) |
find: 찾을 문자열 replace: 바꿀 문자열 반환값: 없음 *find에 주어진 문자나 문자열을 찾아 replace에 주어진 문자나 문자열로 교체 |
Sting one = normal; //문자열이 아님. one.replace = ( 'o', '0'); one.replace = ( 'a', 'A'); |
setCharAt |
void setCharAt(unsigned int index, char ch) |
index: 바꿀 문자의 위치 ch: 바꿀 문자 반환값: 없음 *문자열에서 index로 주어지는 위치의 문자를 ch로 바꿈 *대입 연산자의 좌변에 놓이는 연산자 '[]'와 같은 기능 수행 |
|
startsWith |
unsigned char startsWith(const String &str) |
str: 비교 대상 문자열 반환값: 문자열이 str로 시작하는 경우 true , 아닌 경우 false를 반환 *문자열이 str에 주어진 문자열로 시작하는 지 검사 *str로 시작하면 true, 아니면 false |
|
substring |
String substring(unsigned int from) String substring(unsigned int from, unsigned int to) |
from: 추출할 부분 문자열의 시작 위치 to: 추출할 부분 문자열의 끝 위치 반환값: 추울한 부분 문자열을 반환 *문자열의 부분 문자열을 반환 *from에 지정된 위치의 문자는 포함 *to에 의해 지정된 문자는 포함되지 않는 점에 주의 *끝 위치가 지정되지 않은 경우 시작 위치에서 문자열의 끝까지 부분 문자열로 추출하여 반환 |
String let = "0123456789"; //문자열 생성 String sub1, sub2; sub1 = let.substring(0, 3); //"012"추출 sub2 = let.substring(7); //"789", 7부터 끝까지 |
toCharArray |
void toCharArray(char *buf, unsigned int bufize) |
buf: 문자들을 복사할 버퍼 bufsize: 버퍼의 크기 반환값: 없음 *String 객체의 문자들을 버퍼로 복사 *복사할 문자의 최대 문자의 개수는 bufsize - 1개 *getBytes 함수 ==> buf - unsigned char 형 포인터 *toCharArray 함수 ==> buf - char 형 포인터 |
|
toInt |
long toInt(void) |
매개변수: 없음 반환값: 변환된 정숫값을 반환 *문자열을 정수로 변환하여 반환 *입력 문자는 반드시 숫자로 시작해야 함 *숫자로 변환이 불가능한 문자를 만나면 변환이 종료됨 *변환이 실패할 경우 0을 반환 |
String str1 = "0123"; Searl.println(str1.toInt()); //123 |
toLowerCase |
void toLowerCase(void) |
매개변수: 없음 반환값: 없음 *문자열 내에 포함된 대문자르 소문자로 바꿈 |
|
toUpperCase |
void toUpperCase(void) |
매개변수: 없음 반환값: 없음 *문자열 내에 포함된소문자를 대문자로 바꿈 |
|
trim |
void trim(void) |
매개변수: 없음 반환값: 없음 *문자열의 시작과 끝 부분에 포함된 공백 문자를 제거 *공백 문자 종류 [싱글 스페이스(ASCII 32), 탭(ASCII 9 ), 버티칼 탭(ASCII 11), 폼 피드(ASCII 12), 캐리지 리턴(ASCII 13), 뉴라인(ASCII 10) 등] |
|
[] |
char operator [](unsigned int index) |
index: 문자열에서 찾고 싶은 문자의 위치 반환값: 문자열에서 index 위치의 문자 *문자열 내 문자 접근을 위한 연산자 |
String str = "123456"; for(int = 0; str,length(); i++){ str[i] = str[i] + 'a' - '0'; //문자쓰기 } |
+ |
String & operator += (const String &rhs) String & operator += (const char cstr) String & operator += (char c) String & operator += (unsigned char num) String & operator += (int num) String & operator += (unsigned int num) String & operator += (long num) String & operator += (unsigned long num) |
rhs, cstr, c, num: 연결할 문자, 문자열 또는 숫자 반환값: 문자열을 연결할 새로운 문자열 *문자열 연결 함수 *새로운 문자열 반환 *concat함수는 기존 문자열에 문자열 연결 - 기존 문자열을 변경 *연산자 '+'는 새로운 문자열 생성하여 반환 |
|
== |
unsigned char operator == (const String &rhs) unsigned char operator == (const char cstr) |
rhs, cstr: 비교 문자열 반환값: 비교 문자열과 같으면 true, 다르면 false 반환 *두 문자열을 비교하여 동일하면 true, 다르면 false 반환 *대소문자를 구분함 *equals 함수와 동일한 기능 수행 |
|
'만져보는 임베디드 시스템 > 아두이노 소프트웨어' 카테고리의 다른 글
아두이노 소프트웨어-xxi. I2C를 위한 WIRE 라이브러리 (0) | 2021.01.05 |
---|---|
아두이노 소프트웨어-xx. I2C와 SPI 통신 (0) | 2021.01.05 |
아두이노 소프트웨어-xix. Serial 통신 (0) | 2021.01.05 |
아두이노 소프트웨어-xvii. 아두이노 Serial 클래스 - Serial Class (0) | 2021.01.05 |
아두이노 소프트웨어-xvi. 함수 - 인터럽트 함수 (0) | 2021.01.05 |