01. 화면과 같이 두 정수를 교환하도록 swap() 함수를 작성하고 결과가 나오도록 프로그램을 완성하시오.

#include <stdio.h>

void swap(int *x, int *y) {
	int temp;

	temp = *x;
	*x = *y;
	*y = temp;
}

int main() {
	int x = 10, y = 20;
	printf("swap() 호출 전 x=%d y=%d \n", x, y);
	swap(&x, &y);
	printf("swap() 호출 후 x=%d y=%d \n",x, y);
}

02. 화면과 같이 (1) str1, str2를 입력하면 (2) str1str2를 교환하고 (3) str3str2를 복사하고 (4) str3에 빈칸을 포함해서 str1"Computer Engineering"을 이어 붙이고 (5) str3str4로 뒤집어서 복사한 뒤 출력하는 프로그램을 string.h 함수들을 이용해서 완성하시오. len1 ~ len4 는 각각의 문자열의 길이 변수로 확인 차원에서 출력을 할 것. (주의: reverse() 함수는 문자열을 뒤집어 주기만 하며 그 안에서 프린트를 하지는 않는다. 한글 처리는 필요하지 않음)

 

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

void reverse(char *str1, char *str2) {
	int j = 0;
	for (int i = strlen(str2) - 1, j = 0; i >= 0; i--, j++)
		str1[j] = str2[i];
	str1[strlen(str2)] = NULL;
}


main() {
	char str1[100];
	char str2[100];
	char str3[200];
	char str4[100];
	char temp[100];
	int len1, len2, len3, len4;

	printf("(1) 입력 str1: ");
	scanf("%s", str1);
	printf("    입력 str2: ");
	scanf("%s", str2);

	strcpy(temp, str1);
	strcpy(str1, str2);
	strcpy(str2, temp);
	len1 = strlen(str1);
	len2 = strlen(str2);
	printf("(2) 교환 str1=%s str2=%s \n", str1, str2);
	printf("len1=%d len2=%d\n", len1, len2);

	strcpy(str3, str2);
	printf("(3) 복사 str3=%s\n", str3);
    
	strcat(str3, " ");
	strcat(str3, str1);
	strcat(str3, " ");
	strcat(str3, "Computer Engineering");
	printf("(4) 이어 붙이기 str3=%s\n", str3);
	len3 = strlen(str3);
    
	reverse(str4, str3);
	len4 = strlen(str4);
	printf("(5) 뒤집기 str4=%s\n", str4);
	printf("len4=%d", len4);
}

03. 12장 문자열 강의 자료 파일에서 lab: 메시지 암호화의 인코딩과 디코딩 함수를 모두 완성하기.

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

#define KEY 3

void secret(char* s) {
	int len = strlen(s);
	for (int i = 0; i < len; i++) {
		if (s[i] >= 'a' && s[i] <= 'z') {
			s[i] += KEY;
			if (s[i] > 'z')
				s[i] -= 26;

		}
	}
}

void desecret(char* s) {
	int len = strlen(s);
	for (int i = 0; i < len; i++) {
		if (s[i] >= 'a' && s[i] <= 'z') {
			s[i] -= KEY;
			if (s[i] < 'a')
				s[i] += 26;
		}
	}
}

int main() {
	char s1[100];
	char s2[100];

	printf("문자열을 입력하시오: ");
	gets_s(s1, sizeof(s1));
	secret(s1);
	printf("암호화된 문자열 출력: %s\n", s1);

	printf("암호화된 문자열을 입력하시오: ");
	gets_s(s2, sizeof(s2));
	printf("복호화된 문자열 출력: %s", s2);
}

// string 함수를 모두 mystrcpy() 식으로 변경
#include <stdio.h>
#include <string.h>
#include <mbstring.h>

char *mystrcpy(char *to, char *from)
{
	//int i, len;
	//len = mystrlen(from);
	//for (i=0;i<=len;i++)
	//	to[i] = from[i];
	char *p = to;
	while (*from)
		*to++ = *from++;
	*to = '\0';
	return p;
}
int mystrlen(char *str)
{
	int len = 0;
	//while (str[len]!='\0')
	//	len++;
	while (*str++)
		len++;
	return len;
	
	//char *p = str;
	//while (*p)
	//	p++;
	//return (p - str);
}
int mystrcmp(char *s1, char *s2)	// unsigned char(?) for 한글 등을 위해서...
{
	/*
	int len1, len2, i;
	len1 = mystrlen(s1);
	len2 = mystrlen(s2);
	for (i=0;i<=len1 && i<=len2;i++) {
		if (s1[i]>s2[i])
			return 1;
		else if (s1[i]<s2[i])
			return -1;
	}
	return 0;
	*/
	while ((unsigned char)*s1 || (unsigned char)*s2) {
		if ((unsigned char)*s1 > (unsigned char)*s2)
			return 1;
		else if ((unsigned char)*s1 < (unsigned char)*s2)
			return -1;
		s1++;
		s2++;
	}
	return 0;
}
char *mystrcat(char *to, char *from)
{
	//int i, len1, len2;
	//len1 = mystrlen(to);
	//len2 = mystrlen(from);
	//for (i=0;i<=len2;i++)
	//	to[i+len1] = from[i];
	char *p = to;
	while (*to)
		to++;
	while (*from)
		*to++ = *from++;
	*to = '\0';
	return p;
}
void reverse(char *to, char *from)
{
	char *p;
	p = from + mystrlen(from) - 1; // from 의 끝으로 이동
	while (p>=from) {
		if (*p & 0x80) { // 한글인 경우
			*to = *(p-1); // two bytes씩 copy
			*(to+1) = *p;
			to += 2; // two byte 씩 이동
			p -= 2;
		} else { // 영문인 경우
			*to = *p;
			to++;
			p--;
		}
	}
	*to = '\0';

}
void main()
{
	char str1[100] = "한성대학교";
	char str2[100] = "University";
	char str3[100] = "Computer";
	char str4[100] = "Engineering";
	char str5[100];
	char str6[100];
	int ret;

	ret = mystrlen(str1);
	printf("mystrlen(%s)=%d\n", str1, ret);
	ret = mystrcmp(str1, str1);
	printf("mystrcmp(%s, %s) = %d\n", str1, str1, ret);
	ret = mystrcmp(str1, str2);
	printf("mystrcmp(%s, %s) = %d\n", str1, str2, ret);
	ret = mystrcmp(str1, str3);
	printf("mystrcmp(%s, %s) = %d\n", str1, str3, ret);
	ret = mystrcmp(str1, "한일대학교");
	printf("mystrcmp(%s, %s) = %d\n", str1, "한일대학교", ret); 
	ret = mystrcmp(str1, "한강대학원");
	printf("mystrcmp(%s, %s) = %d\n", str1, "한강대학원", ret);
	ret = mystrcmp(str4, str2);
	printf("mystrcmp(%s, %s) = %d\n", str4, str2, ret);
	ret = mystrcmp(str2, str4);
	printf("mystrcmp(%s, %s) = %d\n", str2, str4, ret);
#if 1
	ret = strlen(str1);
	printf("strlen(%s)=%d\n", str1, ret);
	ret = strcmp(str1, str1);
	printf("strcmp(%s, %s) = %d\n", str1, str1, ret);
	ret = strcmp(str1, str2);
	printf("strcmp(%s, %s) = %d\n", str1, str2, ret);
	ret = strcmp(str1, str3);
	printf("strcmp(%s, %s) = %d\n", str1, str3, ret);
	ret = strcmp(str1, "한일대학교");
	printf("strcmp(%s, %s) = %d\n", str1, "한일대학교", ret);
	ret = strcmp(str1, "한강대학원");
	printf("strcmp(%s, %s) = %d\n", str1, "한강대학원", ret);
	ret = strcmp(str4, str2);
	printf("strcmp(%s, %s) = %d\n", str4, str2, ret);
	ret = strcmp(str2, str4);
	printf("strcmp(%s, %s) = %d\n", str2, str4, ret);
#endif

	mystrcpy(str5, str1);
	printf("mystrcpy str5 = %s\n", str5);
	mystrcat(str5, " ");
	mystrcat(str5, str2);
	printf("mystrcat str5 = %s\n", str5);

	reverse(str6, str5);
	printf("reverse %s = %s\n", str5, str6);
	reverse(str5, str6);
	printf("reverse %s = %s\n", str6, str5);
	printf("_strrev(%s) = ", str5);
	printf("%s\n", _strrev(str5));
	// reverse(str5, str6);
	printf("_mbsrev(%s) = ", str6);
	printf("%s\n", _mbsrev(str6));
}

+ Recent posts