온백의 코딩 블로그

온백의 비밀 기록방

Diary/코딩 갖고 놀기

카이사르 암호를 C언어로 번역시켜 보았다 (미완 ver)

온백 hundred_100 2022. 7. 21. 00:26

※진짜 지금 글 쓰기 귀찮아서 이상하게 써도 양해 부탁드립니다※

https://bollt.tistory.com/15

 

C언어로 카이사르 암호 해독기 만들기(2) 최종본

어제는 진짜 정신이 나가서 못 만들었지만 결국은 만들었다. 어제 있던 댓글 중 하나가 '카이사르 암호가 뭐에요?' 라는 질문이 있어서 짧게 설명하고 넘어가자면 알파벳을 일정한 수 만큼 간격

bollt.tistory.com

위에 글을 봐주세요!! 감사합니다~!


오늘은.. 아니 12시가 넘었으니 어제는
카이사르 번역기를 취미로 만들어 보았다.

간단하게 ASCII 코드를 이용하여 만들어 봤는데
...젠장 어디서 잘못된 거ㅈ

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

int frwd (int a, int b) {	//a: ASCII / b: cnge
	if (a == 0) {
		return 0;
	}
	
	if ((a - b) < 97) {
		b += (122 - a);
		a = (122 - b);
		
		return (a);
	}
	
	else {
		a -= b;
		
		return (a);
	}
}

int bcwd (int a, int b) {	//a: ASCII / b: cnge
	if (a == 0) {
		return 0;
	}
	
	if ((a + b) > 122) {
		b -= (a - 97);
		a = 97 + b;
		
		return (a);
	}
	
	else {
		a += b;
		
		return (a);
	}
}

int main() {
	int cnge = 0, pm = 0, N = 0;	//cnge: 얼마나 앞당길지 / pm: 앞으로, 뒤로
	
	char str[100] = { 0 };
	int ASCII[100] = { 0 };
	
	printf("암호를 얼마나 앞(1)/뒤(2) 당길지 선택 ex) 2 1 -> 2칸 앞으로: \n");
	scanf("%d %d", &cnge, &pm);
	
	printf("\n문자열을 입력하세요 (조건: Small Eng, 100, space X) \n");
	scanf("%s", str);

//	for (int q = 0; q < 100; q++){ 
//		 
//	}
		
	for (int q = 0; q < 100; q++) {
		ASCII[q] = str[q];
		
//		if (ASCII[q] < 97 && ASCII[q] < 122) {
//			break;
//		}
//		N++;
		
		if (pm == 1) {
			ASCII[q] = frwd(ASCII[q], cnge);
		}
		else if (pm == 2) {
			ASCII[q] = bcwd(ASCII[q], cnge);
		}
		else {
			printf("\nerror");
			return 0;
		}
		
//		printf("%c", ASCII[q]);
//		if(ASCII[q] >= 97 && 122 >= ASCII[q]) {
//			printf("%c", ASCII[q]);
//		}
//		else {
//			break;
//		}
	}
	
	for (int q = 0; ASCII[q] >= 97 && 122 >= ASCII[q]; q++) {
		N++;
	}
//	printf("%d", N);
//	return 0;

	for (int q = 0; q < N; q++) {
		printf("%c", ASCII[q]);
	}
	
	
	return 0; 
}

string 헤더 파일과 여러 주석들이 있는데
그만큼 노력했다고(?) 생각하면 된다
정확하게 말해선 어이없는 오류 떄문에 이거저거 다 해본 거다

일단 문제가 생긴 부분은 코드를 번역할 때 z -> a로 넘어가는 부분인데
frwd와 bcwd를 약간 수정하니
그냥 출력이 안된다.
(그 전에는 첫번 째 입력이 10, 2라 할 때
s와 a가 같은 취급을 받았ㄷ)

집중이 하나도 안되는 상태니 언젠가 다시 코드를 수정해서 오겠다.

대충 알고리즘 설명

1. 얼마나 앞/뒤로 문자를 땡길 지 결정
2. 문자열 입력 (암호화 시킬 문장)
3. int타입으로 저장
4. 함수 fr/bcwd로 ASCII[q]와 cnge 변수 점프
5. 앞/뒤로 땡기기, return
6. ASCII[q] == 0 이 될 때 까지 char타입으로 출력

이 글예상 반응: 파이선에는 몇 줄이면 끝나는데 ㅋㅋ 파이썬으로 와


2022.07.17 - [Diary/그 외 코딩 잡 지식] - 프로그래머들에게 추천하는 코딩 폰트, D2coding!

2022.07.17 - [Let's Make Series/Let's Make Drone] - 방학 동안의 대규모(?) 프로잭트 [Let's Make Drone - Epi 1]

2022.07.17 - [Let's Make Series/Let's Make Drone] - 방학 동안의 대규모(?) 프로잭트 [Let's Make Drone - Epi 1]

반응형