FW 심화 과정/[2] STM32심화실습

[C] 유용한 함수작성

천숭이 2022. 8. 1. 23:46

- 문자열 길이 구하는 함수 작성하기

int GetStringLength(char data[])
{
    int count = 0;
    /* 0이 나올 때까지 문자의 개수를 더한다 */
    while (data[count]) count++;  /* while(data[count] != 0) count++; 과 동일 */
                                  /* 문자열의 길이를 반환한다 */
    return count;
}

 

 

<swap 함수>

#include <stdio.h>

/* temp 변수를 이용하여 a와 b의 값을 서로 바꿈 */
void Swap(int *pa, int *pb)
{
    int temp = *pa;   /* *pa(start) = 96, *pb(end) = 5 */
    *pa = *pb;        /* *pa(start) = 5, *pb(end) = 5  */
    *pb = temp;       /* *pa(start) = 5, *pb(end) = 96 */
}

void main()
{
    int start = 96, end = 5;

    printf("before : start = %d, end = %d\n", start, end);
    if (start > end) {
        Swap(&start, &end);  /* start와 end의 값을 바꾸기 위해서 Swap 호출 */
    }
    printf("after : start = %d, end = %d\n", start, end);
}

 

 

<gets로 제한된길이의 문자열 입력 받기>

#include <stdio.h>
/* buffer : 사용자가 입력한 문자열을 저장할 배열
   limit : 최대 입력 가능한 문자 개수
   이 함수가 1을 반환하면 정상 입력되었다는 뜻이고
   0을 반환하면 너무 길게 입력해서 제한된 개수만 받았다는 뜻이다 */
int GetMyString(char buffer[], int limit)
{
    int i;
    for (i = 0; i < limit; i++) { /* 최대 개수만큼만 반복 한다 */
        buffer[i] = getchar();
        if (buffer[i] == '\n') {  /* [Enter] 키가 체크되면 사용자의 입력이
                                  완료 되었다는 뜻이기 때문에 문자열을 완성시키고 함수 종료한다 */
            buffer[i] = 0;  /* [Enter] 키 위치에 0을 넣어서 문자열 완성 */
            return 1;  /* 정상적으로 입력이 완료됨 */
        }
    }
    /* 반복문을 빠져 나왔다는 뜻은 입력 개수 제한을 초과했다는 뜻이기
    때문에 현재 위치에 0을 넣고 문자열 구성을 완료 */
    buffer[i] = 0;
    rewind(stdin);  /* 표준 입력 버퍼에 남아있는 문자들을 제거함 */
    return 0;  /* 입력 초과 현상이 발생했음을 알림 */
}

void main()
{
    char temp[10];
    int state;
    /* 사용자에게 최대 9개까지만 입력받겠다고 제안함 */
    state = GetMyString(temp, 9);

    if (state == 1) printf("input : %s\n", temp); /* 정상 입력 */
    else printf("input : %s -> out of range\n", temp); /* 범위를 초과 */
}

 

 

<문자열 정수 변환 ArraytoInteger >

int ArrayToInteger(char string[])
{
    int count = 0, num = 0;
    /* 문자열이 끝날 때까지 반복 */
 	while(string[count] != 0){
        /* 반복할 때마다 이전 값에 10을 곱해서 자릿수를 증가시킴 */
        num = num * 10 + string[count] - '0';
        count++; /* 다음 문자로 이동 */
    }
    return num;
}