Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- linux
- 정보처리기사
- MyThread
- MFC
- do it c
- C
- Tipsware
- 정처기 독학
- 포트폴리오
- tips강좌
- 핵심 요약
- mfc 실습
- MyTread
- Time
- MFC 예제
- ListBox
- 유료강좌
- C++
- 도움말
- win32
- 미가공
- 김성엽
- 마이크로소프트
- SSG
- 별찍기
- mysql
- C언어
- 충무창업큐브
- 별찍기 기초
- 실습
Archives
- Today
- Total
History
쉼표로 문자열을 구분해서 줄바꿈 출력하기 - 함수 직접 구현 본문
728x90
반응형
아래와 같이 쉼표로 구분된 문자열이 있습니다.
"Hello~! ,My name is minki kim~ ,How are you today~? ,:)"
이 문자열을 쉼표 구분해서 아래와 같은 이미지처럼 나오게 하려면 어떻게 해야 할까?
단 이번 게시물에서는 직접 사용자 함수를 만들어서 ', ' 단위로 구분할 것이다. 그리고 ', '를 기점으로 줄 바꿈 문자와 strtok 함수를 사용하지 않을 것이다.
우선
우선 함수의 매개변수를 3가지 만들었다.
첫 번째 매개 변수는 전체 문자열을 대입할 포인터 변수이다.
두 번째 매개 변수는 구분자를 받을 문자 변수다.
마지막 매개 변수는 분리한 문자열 추출하기 위한 매개변수다.
#include<stdio.h>
#pragma warning(disable:4996)
// ap_string 문자열에서 a_delimiter 또는 NULL 문자가 나올때까지 ap_temp_string 메모리에
// 문자열을 복사한다. 예를들어, ap_string "abc,def"라고 들어있고 a_delimiter에
// ','가 전달되면 ap_temp_string "abc"문자열이 저장된다.
// 그리고 이 함수는 자신이 탐색을 완료한 위치의 다음 주소를 반환한다.
// 즉 "abc,def" 문자열의 ','문자 다음에 위치한 주소(d의 주소)를 반환한다.
char *GetNextString(char *ap_string, char a_delimiter, char *ap_temp_string){
// NULL 문자 또는 a_delimiter 문자가 나올때까지 반복하면서
// ap_string이 가리키는 문자를 ap_temp_string이 가리키는 메모리에 복사한다.
while (*ap_string && *ap_string != a_delimiter) *ap_temp_string++ = *ap_string++;
*ap_temp_string = 0; //분리된 문자열 마지막 위치에는 null문자를 추가한다.
// ap_string 포인터가 가리키는 위치는 문자열 분리에 사용된 a_delimiter 문자의
// 위치이거나 NULL 문자의 위치이다. 만약 a_delimiter 문자 위치를 가리킨다면
// 다음 문자는 ',' 다음 위치에서 진행될 것이기 때문에 ++해준다.
if (*ap_string == a_delimiter) ap_string++;
return ap_string; // 탐색을 완료한 위치의 주소를 반환한다.
}
int main()
{
char string[] = "Hello~! ,My name is minki kim~ ,How are you today~? ,:)";
char *p_pos = str; // 문자열의 시작 주소를 대입
char tmep_string[32]; // 각 문장을 저장할 변수
// NULL 문자가 나올때까지 반복한다.
for (int i = 1; *p_pos; i++) {
// p_pos위치에서 시작하여 ',' 문자가 나올때까지
// tmep_string 변수에 문자열을 복사한다.
p_pos = GetNextString(p_pos, ',', tmep_string);
// 분리한 문자열을 출력한다.
printf("%d - %s\n", i, tmep_string);
}
return 0;
}
위와 같이 구성하면 string.h와 같은 헤더파일을 사용하지 않고 문자열 처리를 할 수 있기 때문에 후에 프로그래밍을 할 때 좀 더 성능이 좋은 프로그램을 만들 수 있다.
728x90
반응형
'C,C++ > 개념 실습 프로그래밍' 카테고리의 다른 글
[c언어]현재 시간을 출력하려면 어떻게 해야할까? (0) | 2022.09.21 |
---|---|
문자열에 포함된 숫자를 문자로 변경하기 (0) | 2022.09.21 |
strtok_s 함수를 이용해서 쉼표로 문자열을 구분해서 줄바꿈 출력하기 (0) | 2022.09.21 |
[c언어]쉼표로 문자열을 구분해서 줄바꿈 출력하기 (0) | 2022.09.19 |
fread (0) | 2022.07.14 |
Comments