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) str1과 str2를 교환하고 (3) str3에 str2를 복사하고 (4) str3에 빈칸을 포함해서 str1과 "Computer Engineering"을 이어 붙이고 (5) str3를 str4로 뒤집어서 복사한 뒤 출력하는 프로그램을 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));
}
'프로그래밍랩' 카테고리의 다른 글
프로그래밍랩 9주차 (0) | 2024.11.07 |
---|---|
[프로그래밍 랩] C언어 복습 문제 4 (0) | 2024.10.25 |
[프로그래밍 랩] C언어 복습 문제 5 (0) | 2024.10.25 |
[프로그래밍 랩] C언어 복습 문제 1 (0) | 2024.10.18 |
[프로그래밍 랩] C언어 복습 문제 2 (0) | 2024.10.10 |