#include <stdio.h>
#include <stdlib.h>
//Lower 소문자로
//Upper 대문자로
//Swap 소->대 대->소
//ASCII CODE
char* Lower(char _str[], int _len);
char* Upper(char _str[], int _len);
char* Swap(char _str[], int _len);
int main() {
char str[] = "Hello, World!";
int len = sizeof(str) / sizeof(str[0]);
int i = 0;
printf("%s\n", str);
printf("%s\n", Lower(-5, len));
printf("%s\n",Upper(str, len));
printf("%s\n", Swap(str, len));
return 0;
}
char* Lower(const char _str[], int _len) {
int i = 0;
static char temp[50];
if (_str == NULL ) {
printf("NULL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return 0;
}
else if (_str >= 0 && _str <= 31) {
printf("문자만!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return 0;
}
else if (_str <= 0 || _str == "") {
printf("문자만!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return 0;
}
while (_str[i] != '\0') {
if (i >= 50) {
printf("너무긺!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return 0;
}
else{
temp[i] = _str[i];
}
++i;
}
temp[i] = '\0';
for (i = 0; i < _len; ++i) {
if (temp[i] > 65 && temp[i] <= 90) {
temp[i] = temp[i] + 32;
}
}
return temp;
}
char* Upper(const char _str[], int _len) {
int i = 0;
static char temp[50];
if (_str == NULL) {
printf("NULL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return 0;
}
else if (_str >= 0 && _str <= 31) {
printf("문자만!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return 0;
}
while (_str[i] != '\0') {
if (i >= 50) {
printf("너무긺!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return 0;
}
else {
temp[i] = _str[i];
}
++i;
}
temp[i] = '\0';
for (i = 0; i < _len; ++i) {
if (temp[i] > 97 && temp[i] <= 122) {
temp[i] = temp[i] - 32;
}
}
return temp;
}
char* Swap(const char _str[], int _len) {
int i = 0;
static char temp[50];
if (_str == NULL) {
printf("NULL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return 0;
}
else if (_str >= 0 && _str <= 31) {
printf("문자만!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return 0;
}
while (_str[i] != '\0') {
if (i >= 50) {
printf("너무긺!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return 0;
}
else {
temp[i] = _str[i];
++i;
}
}
temp[i] = '\0';
for (i = 0; i < _len; ++i) {
if (temp[i] > 97 && temp[i] <= 122) {
temp[i] = temp[i] - 32;
}
else if (temp[i] > 65 && temp[i] <= 90) {
temp[i] = temp[i] + 32;
}
}
return temp;
}
Lower(0, len) 등 0부터 31까지는 아스키 코드로 의미가 있는 숫자이기 때문에 직접 넣을 경우 문제가 발생
(0은 NULL이 들어가는 등)
해당 숫자가 들어왔을 경우 바로 return 0;
Lower(-1, len) 등 음수를 넣으면 터지는 문제가 발생
temp의 길이보다 긴 문자열이 들어오면 에러 발생
-> 문자를 입력 받을 때 scanf나 직접 초기화 하는 방식 말고
fget()으로 입력받으면 원하는 길이 이상의 문자는 자동으로 잘려서 저장됨.
숫자 등이 들어와도 문자로만 저장되어서 의도치 않은 값이 저장되는 것을 방지
'CS > C' 카테고리의 다른 글
20240111 C - Enum(열거체) (1) | 2024.01.11 |
---|---|
20240110 C - 포인터와 메모리 관리 (2) | 2024.01.10 |
20240109 C - 구조체 (1) | 2024.01.10 |
20240109 C - 2차원 배열 (1) | 2024.01.10 |
20240109 C - 문자열 (0) | 2024.01.10 |