[C] 문자열 응용(strtok(), atoi() 등)
문자열 속성
- 문자열(string, %s)의 끝에는 NULL(\0) 이 붙는다.
- 문자열을 사용할땐 문자열의 주소를 사용한다.(변수그대로 사용하면 됨)
strtok()
-
문자열을 잘라주는 함수
-
strtok( 문자열 , 구분자 )
- 문자열에서 구분자까지 커서가 이동하여 구분자를 NULL로 변환
- 이때 반환형은 문자열 주소
-
strtok( NULL, 구분자 )
- 이전에 strtok때 사용된 NULL 주소를 시작 커서로 둔다. 그리고 strtok진행
- 정말 특이한 함수.
-
코드
#define _CRT_SECURE_NO_WARNINGS // strtok 보안문제 있음.
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "hello every 1";
char* ptr;
ptr = strtok(str, " ,.-");
while (*ptr != NULL) {
printf("%s \n", ptr);
ptr = strtok(NULL, " ,.-");
}
return 0;
}
문자열, 숫자형 변환
-
atoi() : 문자형숫자를 숫자형으로
- int형이면 atoi
- long형이면 atol
- float형이면 atof
-
itoa() : 숫자형를 문자형숫자로 바꾸고싶으면
-
sprintf() : 숫자형을 문자형숫자로 바꾸고싶으면
- 문자열은 주소값만 가지고 쓰이는 친구.(\0이 있는지는 컴파일러가 알아서 봄)
-
코드
#define _CRT_SECURE_NO_WARNINGS // strtok 보안문제 있음.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct data {
char* s; //문자열공간
int num;
} DATA;
int main() {
DATA data;
char str[] = "hello 1";
char* ptr;
int num = 0;
int i = 0;
ptr = strtok(str, " ,.-");
while (*ptr != NULL) {
switch (i) {
case 0 :
data.s = ptr;
printf("%s \n", data.s);
break;
case 1 :
data.num = atoi(ptr);
printf("%d \n", data.num);
break;
}
ptr = strtok(NULL, " ,.-");
i++;
}
return 0;
}
- 결과
gets()
- scanf()와 gets()의 차이
- scanf는 '스페이스바'를 인식하면 끊긴다.
- gets는 안끊기고 그대로 받는다.
*코드
typedef struct data {
char* s; //문자열공간
int num;
} DATA;
int main() {
DATA data;
char str[50];
char* ptr;
int num = 0;
int i = 0;
printf("문자열 숫자 : ");
gets(str);
ptr = strtok(str, " ,._-");
while (*ptr != NULL) {
switch (i) {
case 0 :
data.s = ptr;
printf("%s \n", data.s);
break;
case 1 :
data.num = atoi(ptr);
printf("%d \n", data.num);
break;
}
ptr = strtok(NULL, " ,.-");
i++;
}
return 0;
}
참고
Author And Source
이 문제에 관하여([C] 문자열 응용(strtok(), atoi() 등)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@psh4204/C-문자열-자르기strtok
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
-
문자열을 잘라주는 함수
-
strtok( 문자열 , 구분자 )
- 문자열에서 구분자까지 커서가 이동하여 구분자를 NULL로 변환
- 이때 반환형은 문자열 주소
-
strtok( NULL, 구분자 )
- 이전에 strtok때 사용된 NULL 주소를 시작 커서로 둔다. 그리고 strtok진행
- 정말 특이한 함수.
-
코드
#define _CRT_SECURE_NO_WARNINGS // strtok 보안문제 있음.
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "hello every 1";
char* ptr;
ptr = strtok(str, " ,.-");
while (*ptr != NULL) {
printf("%s \n", ptr);
ptr = strtok(NULL, " ,.-");
}
return 0;
}
문자열, 숫자형 변환
-
atoi() : 문자형숫자를 숫자형으로
- int형이면 atoi
- long형이면 atol
- float형이면 atof
-
itoa() : 숫자형를 문자형숫자로 바꾸고싶으면
-
sprintf() : 숫자형을 문자형숫자로 바꾸고싶으면
- 문자열은 주소값만 가지고 쓰이는 친구.(\0이 있는지는 컴파일러가 알아서 봄)
-
코드
#define _CRT_SECURE_NO_WARNINGS // strtok 보안문제 있음.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct data {
char* s; //문자열공간
int num;
} DATA;
int main() {
DATA data;
char str[] = "hello 1";
char* ptr;
int num = 0;
int i = 0;
ptr = strtok(str, " ,.-");
while (*ptr != NULL) {
switch (i) {
case 0 :
data.s = ptr;
printf("%s \n", data.s);
break;
case 1 :
data.num = atoi(ptr);
printf("%d \n", data.num);
break;
}
ptr = strtok(NULL, " ,.-");
i++;
}
return 0;
}
- 결과
gets()
- scanf()와 gets()의 차이
- scanf는 '스페이스바'를 인식하면 끊긴다.
- gets는 안끊기고 그대로 받는다.
*코드
typedef struct data {
char* s; //문자열공간
int num;
} DATA;
int main() {
DATA data;
char str[50];
char* ptr;
int num = 0;
int i = 0;
printf("문자열 숫자 : ");
gets(str);
ptr = strtok(str, " ,._-");
while (*ptr != NULL) {
switch (i) {
case 0 :
data.s = ptr;
printf("%s \n", data.s);
break;
case 1 :
data.num = atoi(ptr);
printf("%d \n", data.num);
break;
}
ptr = strtok(NULL, " ,.-");
i++;
}
return 0;
}
참고
Author And Source
이 문제에 관하여([C] 문자열 응용(strtok(), atoi() 등)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@psh4204/C-문자열-자르기strtok
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
atoi() : 문자형숫자를 숫자형으로
- int형이면 atoi
- long형이면 atol
- float형이면 atof
itoa() : 숫자형를 문자형숫자로 바꾸고싶으면
sprintf() : 숫자형을 문자형숫자로 바꾸고싶으면
- 문자열은 주소값만 가지고 쓰이는 친구.(\0이 있는지는 컴파일러가 알아서 봄)
코드
#define _CRT_SECURE_NO_WARNINGS // strtok 보안문제 있음.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct data {
char* s; //문자열공간
int num;
} DATA;
int main() {
DATA data;
char str[] = "hello 1";
char* ptr;
int num = 0;
int i = 0;
ptr = strtok(str, " ,.-");
while (*ptr != NULL) {
switch (i) {
case 0 :
data.s = ptr;
printf("%s \n", data.s);
break;
case 1 :
data.num = atoi(ptr);
printf("%d \n", data.num);
break;
}
ptr = strtok(NULL, " ,.-");
i++;
}
return 0;
}
- scanf()와 gets()의 차이
- scanf는 '스페이스바'를 인식하면 끊긴다.
- gets는 안끊기고 그대로 받는다.
*코드
typedef struct data {
char* s; //문자열공간
int num;
} DATA;
int main() {
DATA data;
char str[50];
char* ptr;
int num = 0;
int i = 0;
printf("문자열 숫자 : ");
gets(str);
ptr = strtok(str, " ,._-");
while (*ptr != NULL) {
switch (i) {
case 0 :
data.s = ptr;
printf("%s \n", data.s);
break;
case 1 :
data.num = atoi(ptr);
printf("%d \n", data.num);
break;
}
ptr = strtok(NULL, " ,.-");
i++;
}
return 0;
}
참고
Author And Source
이 문제에 관하여([C] 문자열 응용(strtok(), atoi() 등)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@psh4204/C-문자열-자르기strtok
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여([C] 문자열 응용(strtok(), atoi() 등)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@psh4204/C-문자열-자르기strtok저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)