C,C++ 기초 핵심설명/ 문자열과 str (문자열로 메뉴 만드는 예제)

 -strchr() 함수는 str에서 첫번째 ch문자를 찾고, strstr함수는 str에서 첫번째 substr 문자열을 찾고 그 위치의 문자의 주소를 반환한다

-strtok 함수는 str문자열을 delim 문자열에 있는 구분문자들을 이용해서 token으로 쪼개고 토큰 주소를 리턴  (구분자: space , . -)

-문자를 입력하는 함수는 scanf() 함수인데 공백문자를 만날때까지만 읽어옴, 따라서 빈칸 포함한 문자열 입력하려면 get_s 함수나 fgets 함수를 이용

-한 줄의 문자열 출력하려면 puts함수 이용 ( int puts(const char* str); )

-문자열 포인터 : char* p = "asdad"; (주로 문자 배열을 가리키는 데 사용됨)

-문자열 리터럴은 리터럴의 주소를 의미한다 (리터럴: 상수화변수에 대입되는 고정된 값) ,메모리에 할당됨 (값 변경 불가)

-const char* 형의 문자열 포인터는 문자열 리터럴을 가르키는 용도로 사용 (변경불가)


정리하면

char* 의 포인터는 변경할 수 있는 문자 배열 가르킬 때, (문자열이 출력 매개변수 일 경우, 근데 이렇게 쓸 때는 배열 크기도 매개변수로 전달)

const char* 형의 포인터는 변경할 수 없는 읽기전용 문자열을 가르킬 때 사용 (문자열 리터럴 같은, or 문자열이 입력 매개변수)


-i번째 문자열의 j번째 문자에 접근하려면 행(문자열의 갯수) 인덱스와 열(문자열의 길이) 인덱스를 모두 사용한다 (2차원 문자배열) 


문자열로 메뉴판 만드는 예제


#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <string.h>


int main(void)

{

    const char* str_menu[] = {                    //str_menu는 원소가 5개인 포인터 배열

        "end", "new", "open", "save", "print"

    };

    int sz_menu = sizeof(

        str_menu / sizeof(str_menu[0]);  //포인터 배열의 크기


    int menu;


while(1) {

    int i;

    for(i = 0; i<sz_menu; i++)           // 포인터 배열의 크기만큼 while문 반복

          printf("%d. %s\n", i, str_menu[i]);    //str_menu가 가르키는 문자열을 출력

    printf("menu?");

    scanf("%d",&menu);

    if(menu == 0)  // menu를 입력받은 다음 탈출 루프조건 검사

       break;

    else if (menu > 0 && men <sz_menu[menu]);

      printf("%s menu choiced \n\n", str_menu[menu]);   


}    

}




댓글

이 블로그의 인기 게시물

시험에 나오는 전기공사 산업기사정리 전기기기-직류기의 구조

익리덤 없는사람은 불쌍해,,후기, 단점, 도색 (MGEX 스트라이크 프리덤)

주식의 기술적 분석- 이큐볼륨차트(EQui volume chart)