혜랑's STORY

[2021 겨울 C언어 2주차] 본문

2021 SISS 21기 활동/겨울방학 C

[2021 겨울 C언어 2주차]

hyerang0125 2021. 1. 14. 22:02

#1 두 개의 문자열 s1, s2를 입력 받고, s1과 s2에 같은 index에 있는 문자들을 비교해서 같으면 O, 
다르면 X를 출력하시오.

※조건

  • 문자열의 길이는 모두 30을 넘지 않음
  • 문자 비교 중 공백일 경우 X를 출력함
  • 포인터 사용

 

- 풀이

문자열1, 문자열2, 인덱스 번호를 파라미터로 가지는 함수 compare()를 만든다. 이 함수는 각 문자열의 인덱스 값을 비교하고 같으면 flag에 1을 대입하고 아니면 초기의 -1값을 반환하도록 하였다. 

main 함수에서 while문을 둘 중 더 긴 문자열이 끝날때 까지 수행하도록 하기 위하여 두 문자열 중 더 긴 값을 n에 저장해 주었다. while문은 compare을 통해 얻은 값이 1이라면 같은 문자라는 의미이기 때문에 'O'를 출력하고, 아니면 'X'를 출력하도록 하였다. 

- 코드

#include <stdio.h>
#include <string.h>

int compare(char *str1, char *str2, int x);

int main(){
    char str1[31];
    char str2[31];

    scanf("%s",str1);
    scanf("%s",str2);

    int n = strlen(str1)>strlen(str2)?strlen(str1):strlen(str2);

    int i=0;
    while(n>0){
        char result = compare(str1, str2, i)==1?'O':'X';
        printf("%c",result);
        ++i; --n;
    }
    return 0;
}

int compare(char *str1, char *str2, int x){
    int flag = -1;
    if(str1[x] == str2[x])
        flag = 1;
    return flag;
}

- 실행결과

 

#2 문자열 S와 숫자 N을 입력받고, 다음과 같은 규칙으로 문자열을 바꾼다.

※규칙

  1. 맨 앞글자는 문자열의 맨 뒤로 이동한다.
  2. 맨 앞글자를 제외한 나머지 문자들은 한 칸씩 앞으로 이동한다.
  3. 이 규칙을 함수로 구현한다.

문자열 S를 N번 바꾼 결과를 출력하시오. (문자열의 길이는 30을 넘지 않고, N은 100보다 작은 양의 정수이다.)

 

- 풀이

move() 함수는 문자열을 파라미터로 가지며, 위의 규칙을 수행하는 함수이다. 먼저 맨 앞글자를 담아둘 temp라는 변수를 만들어 둔 뒤, 문자열의 끝까지 맨 앞글자를 제외한 나머지 문자들을 한 칸씩 앞으로 이동 시킨다. while문을 탈출했다는 것은 i가 NULL의 위치에 있다는 것을 의미하기 때문에 1을 빼준 인덱스(맨 마지막 글자)에 temp에 미리 넣어두었던 맨 앞글자를 넣어준다.

- 코드

#include <stdio.h>

void move(char *str);

int main(){
    char S[31];
    int N;

    scanf("%s", S); scanf("%d",&N);

    for(int i=0; i<N; i++){
        move(S);
    }

    printf("%s", S);
}

void move(char *str){
    int i=0;
    char temp = str[0];
    while(str[i]){
        str[i] = str[i+1];
        i++;
    }
    str[--i] = temp;

}

- 실행결과

'2021 SISS 21기 활동 > 겨울방학 C' 카테고리의 다른 글

[BOJ_C] 1316번, 2869번  (0) 2021.02.08
[BOJ_C] 2748번, 2750번  (0) 2021.02.01
[BOJ_C] 2941번, 2884번  (0) 2021.01.23
[BOJ_C] 1037번, 1712번  (0) 2021.01.18
[BOJ_C] 10809번, 10773번  (0) 2021.01.06