728x90
C++에서는 특정문자 기준으로 문자열을 자르는 기능이 없다.
=> C의 strtok를 이용해야한다.
하지만 strtok의 첫번째 매개변수는 char배열이어야한다!
그래서 string을 c언어의 문자열형식으로 바꿔줘야 한다.
1. strcpy(담을 char배열, string.c_str())
2. strtok(자를 char배열, 구분문자)
strtok은 자른 문자열의 포인터를 반환한다. 문자열 끝에 왔을 때는 NULL을 반환한다.
char c_array[100];
string s = "Hello Happy World!";
strcpy(c_array, s.c_str());
char *ptr = strtok(c_array, " "); //첫번째로 자를 땐 첫번째 매개변수에 문자열
while (ptr != NULL) { // 계속해서 자를 때
cout << ptr << " ";
ptr = strtok(NULL, " "); //NULL이면 이전에 찾은 구분자 뒤에서 다시 구분자를 찾음
}
왜 두번째 자를때부턴 매개변수에 null을 넣는거지? 라고 생각하시는분.. 자세한 설명은 아래 참조
[C언어/C++] strtok 함수(문자열 자르기)에 대해서. (tistory.com)
+ 자른 문자열을 char배열에 담는 예제
int main() {
char c_array[100];
char cut[3][100]; //문자열 배열이므로 2차원 배열형태로 선언
string s = "Hello Happy World!";
strcpy(c_array, s.c_str());
char* ptr = strtok(c_array, " ");
int i = 0;
while (ptr != NULL)
{
strcpy(cut[i], ptr); //cut[i] = ptr는 안됨(배열이름이 포인터라서)
ptr = strtok(NULL, " ");
i++;
}
for (int i = 0; i < 3; i++) {
cout << cut[i] << " "; //Hello Happy World! 가 출력된다
}
}
728x90
'Major > C&C++' 카테고리의 다른 글
[C언어] 공백없이 입력되는 n*m행을 2차원 배열로 저장하기 (2) | 2022.02.15 |
---|---|
[C++] 공백(띄어쓰기)포함 문자열 입력받기 (0) | 2021.09.23 |
[C++] 명품 C++ Programming 4장 연습문제 (4) | 2021.08.25 |
[C++] 명품 C++ Programming 4장 개념정리 (0) | 2021.08.11 |
[C++] 명품 C++ Programming 3장 연습문제 (0) | 2021.08.07 |