ipwn

C) strlen, strcmp, strcpy 함수 조사 및 구현 본문

Programming

C) strlen, strcmp, strcpy 함수 조사 및 구현

ipwn 2017. 12. 18. 15:09

1.string.h 헤더파일


strlen,strcmp,strcpy이 세 함수를 사용하기 위한 헤더파일입니다.


당연한 말이지만 이 세 함수 말고도 더 많은 함수들이 포함되어 있습니다.


2. strlen함수

​strlen 함수는 한 문자열의 크기를 측정하는 함수입니다.


사용은 아래와 같은 방식으로 이뤄 집니다.


1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<string.h>
int main() {
    int howlong;
    char input[400];
 
    gets_s(input);
    howlong = strlen(input);
    printf("input의 길이는 %d 입니다.", howlong);
    return 0;
}
cs


위 코드를 실행하면 아래와 같은 실행결과가 출력 됩니다.


띄어쓰기 포함, 글자의 크기를 측정 해 줍니다.


위 방법을 심화시켜 사용하면 아래와 같은 코드를 만들 수 있습니다.


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
#include<stdio.h>
#include<string.h>
int main() {
    char ch[200];
    int i, j;
    int a, b, cnt = 0;
    gets_s(ch);
    for (i = 0; i <= strlen(ch); ++i) {//문자열의 길이만큼 반복문 반복
        if (0x30 <= ch[i] && 0x39 >= ch[i] && cnt == 0) {//a에 숫자 대입
            a = ch[i] - 0x30;
            cnt++;
        }
        else if (0x30 <= ch[i] && ch[i] <= 0x39 && cnt == 1) {//b에 숫자 대입
            b = ch[i] - 0x30;
        }
    }
    for (j = 0; j <= strlen(ch); ++j) {//문자열 길이만큼 반복문 반복
        switch (ch[j]) {//연산자인지 확인 후 연산 뒤 결과 출력
        case '+':printf("%d", a + b);
            break;
        case '-':printf("%d", a - b);
            break;
        case '*':printf("%d", a * b);
            break;
        case '/':printf("%d", a / b);
            break;
        }
    }
    return 0;
}
cs


위 코드를 실행하면 아래와 같은 결과가 출력됩니다.



문자열 길이와 반복문, 조건문을 적절히 섞어 문자열로 수식을 입력받아 


실행 결과를 출력합니다.(한자리수만)


for문으로 구현하면 아래와 같은 코드가 나옵니다,


실행결과는 첫째 코드와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main() {
    int i;
    char input[400];
    gets_s(input);
    int cnt = 0;
    for (i = 0; input[i] != '\0'++i) {
        cnt++;
    }
    printf("input의 길이는 %d 입니다.", cnt);
    return 0;
 
}
cs

 


3. strcmp 함수


strcmp 함수는 두개의 문자열을 비교해주는 함수 입니다.


strcmp는 두 문자열이 같을경우 0, 다를경우는 1 또는 -1로 반환되는데요,

1
strcmp(ch1,ch2);
cs


위와 같은 코드가 있다고 가정하면​


1로 반환되는 경우는 ch1이 ch2보다 사전순서로 뒤에 있는 경우 이고,


-1로 반환되는 경우는 ch1이 ch2보다 사전순서로 앞에 있는 경우 입니다.


사용법은 아래와 같은 방식입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
#include<string.h>
int main() {
    char in[200], put[200];
    int same;
    printf("첫번째 문자열 입력 : ");
    gets_s(in);
    printf("두번째 문자열 입력 : ");
    gets_s(put);
    same = strcmp(in, put);//strcmp는 두 문자열이 같을시 0, 다를경우 1또는 -1
    if (same == 0) {//두 문자열이 같은지 비교
        printf("두 문자열은 같습니다.\n");
    }
    else {
        printf("두 문자열은 다릅니다.\n");
    }
    return 0;
    
}
cs


위 코드를 실행하면 아래와 같은 결과를 출력합니다.


말 그대로 두 문자열을 비교해주는 코드였습니다. strcmp 함수를 심화해서 


사용한다면 아래와 같은 방식도 가능하겠죠?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include<string.h>
int main() {
 
 
    char ch[200];
    char pw[] = "PassWord";
    do {
 
        printf("비밀번호를 입력하시오 : ");
 
        gets_s(ch);
 
    } while (strcmp(ch, pw) != 0);//pw 문자열과 ch 문자열이 같을경우 반복문 탈출
 
 
    printf("Login Success!!\n");
    return 0;
 
}
cs

실행결과는 다음과 같습니다.



pw 문자열과 똑같은 문자열을 입력할 경우 반복문을 탈출하지만 ,


다를경우 계속해서 반복문을 돌면서 pw문자열과 같은 문자열을 입력해야 합니다.​

for문으로 구현하면 아래와 같은 코드가 나옵니다,


실행결과는 strcmp 첫 코드와 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
int main() {
    int i, j;
    char in[400];
    char put[400];
    int cnt = 0;
    int count = 0;
    gets_s(in);
    gets_s(put);
    for (i = 0; in[i] != '\0'++i)
        cnt++;
    for (j = 0; put[j]!='\0'++j) {
        if (in[j] == put[j]||count==cnt) {
            count++;
        }
    }
    if (count == cnt) {
        printf("두 문자열은 같습니다.");
    }
    else {
        printf("두 문자열은 다릅니다.");
    }
    return 0;
}
cs





4. strcpy 함수


​strcpy 함수는 문자열을 복사해주는 함수인데요

형태는 아래 코드와 같습니다.​

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
#include<string.h>
int main() {
    char ch[400];
    char output[400];
    gets_s(ch);
    strcpy(output, ch);
    printf("%s", output);
    return 0;
}
cs


ch에 문자열을 입력받고 output에 그대로 복사해주는 코드입니다.




실행결과는 위와 같습니다.


이건 딱히 예제 만들게 없네요..​


for문으로 구현하면 아래와 같은 코드입니다,


실행 결과는 첫번째 코드의 실행결과와 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
int main() {
    int i;
    char input[400];
    char output[400];
    gets_s(input);
    for (i = 0; input[i - 1!= '\0'++i) {
        output[i] = input[i];
    }
    printf("%s", output);
    return 0;
}
cs


'Programming' 카테고리의 다른 글

C) 코드업 함수문제 풀이  (0) 2017.12.18
C) swap 함수 구현  (0) 2017.12.18
C) 포인터  (0) 2017.12.18
C) 함수란 ?  (0) 2017.12.18
C) 배열, 2차원 배열이란?  (0) 2017.12.18
Comments