[C] 문자열 응용(strtok(), atoi() 등)

Sireal·2022년 1월 7일
0

C

목록 보기
9/12

문자열 속성

  • 문자열(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;
}

참고

profile
🚄계속 앞으로🚄

0개의 댓글