1. 문자열을 입력받아서 대문자는 소문자로, 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.
[소스코드]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
void main(void)
{
int i = 0;
char ch;
char aszData[128] = { 0 };
printf("Input Your Character: ");
gets_s(aszData, __crt_countof(aszData));
while ((ch = aszData[i]) != '\0')
{
if (isalpha(ch))
{
if (isupper(ch))
{
aszData[i] = tolower(ch);
}
else if (islower(ch))
{
aszData[i] = toupper(ch);
}
}
++i;
}
puts(aszData);
return;
}
[실행결과]
2. 사용자로부터 두 문자열을 입력받은 후, 두 문자열 중에서 길이가 긴 문자열이 출력되는 프로그램을 작성하세요.
[소스코드]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void main(void)
{
char aszData1[128] = { 0 };
char aszData2[128] = { 0 };
int nStr1Length = 0;
int nStr2Length = 0;
char* pszLongData = NULL;
printf("Input your string1: ");
gets_s(aszData1, __crt_countof(aszData1));
printf("Input your string2: ");
gets_s(aszData2, __crt_countof(aszData2));
nStr1Length = strlen(aszData1);
nStr2Length = strlen(aszData2);
if (nStr1Length > nStr2Length)
{
pszLongData = aszData1;
}
else if (nStr1Length < nStr2Length)
{
pszLongData = aszData2;
}
else
{
pszLongData = "Same!";
}
printf("Longer string: %s\n", pszLongData);
return;
}
[실행결과]
3. 사용자로부터 두 문자열을 입력받은 후, 하나로 합쳐서 출력하는 프로그램을 작성하세요. 단, 두 문자열을 합칠 때 반드시 sprintf() 함수를 사용해야 하며, 첫 번째 입력받은 문자열이 저장된 메모리(배열)에 합친 결과가 저장되도록 합니다.
[소스코드]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void main(void)
{
char aszData1[128] = { 0 };
char aszData2[128] = { 0 };
printf("Input string1: ");
gets_s(aszData1, __crt_countof(aszData1));
printf("Input string2: ");
gets_s(aszData2, __crt_countof(aszData2));
sprintf(aszData1 + strlen(aszData1), "%s", aszData2);
puts(aszData1);
return;
}
[실행결과]
4. 3번 문제의 답을 수정하여 sprintf() 함수 대시 strcat() 함수를 사용하여 같은 결과가 나오도록 코드를 변경하세요.
[소스코드]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void main(void)
{
char aszData1[128] = { 0 };
char aszData2[128] = { 0 };
char* pszResult = NULL;
printf("Input string1: ");
gets_s(aszData1, __crt_countof(aszData1));
printf("Input string2: ");
gets_s(aszData2, __crt_countof(aszData2));
pszResult = strcat(aszData1, aszData2);
puts(pszResult);
return;
}
[실행결과]
5. 사용자로부터 두 문자열을 입력받아 각각의 메모리(배열)에 따로 저장한 후, 두 문자열을 하나로 합쳐서 저장하는 메모리를 동적으로 할당받고 여기에 앞서 입력받은 두 문자열을 하나로 합쳐서 저장하는 프로그램을 작성하세요. 단, 문자열을 합치는 방법으로 sprintf()함수나 strcat()함수를 사용하지 말고, strcpy() 함수를 사용해야 합니다.
[소스코드]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(void)
{
char aszData1[128] = { 0 };
char aszData2[128] = { 0 };
char* pszResult = NULL;
int nData1Length = 0;
int nData2Length = 0;
printf("Input string1: ");
gets_s(aszData1, _countof(aszData1));
printf("Input string2: ");
gets_s(aszData2, _countof(aszData2));
nData1Length = strlen(aszData1);
nData2Length = strlen(aszData2);
pszResult = (char*)malloc((nData1Length + nData2Length + 1) * sizeof(char));
if (pszResult != NULL)
{
memset(pszResult, 0, (nData1Length + nData2Length + 1) * sizeof(char));
strcpy(pszResult, aszData1);
strcpy(pszResult + nData1Length, aszData2);
printf("result: %s\n", pszResult);
free(pszResult);
}
return;
}
[실행결과]
6. 두 단어를 입력받아 같은 단어인지 비교하여 결과를 출력하는 프로그램을 작성하세요. 단, 대소문자는 구별하지 않고 비교해야 합니다.
[소스코드]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void to_lower_string(char* str, int length)
{
for (int i = 0; i < length; ++i)
{
if (isalpha(str[i]) && isupper(str[i]))
{
str[i] = tolower(str[i]);
}
}
return;
}
void main(void)
{
int nResult = 0;
char aszWord1[65] = { 0 };
char aszWord2[65] = { 0 };
printf("Input string1: ");
gets_s(aszWord1, __crt_countof(aszWord1));
printf("Input string2: ");
gets_s(aszWord2, __crt_countof(aszWord2));
to_lower_string(aszWord1, strlen(aszWord1));
to_lower_string(aszWord2, strlen(aszWord2));
nResult = strcmp(aszWord1, aszWord2);
if (nResult == 0)
{
puts("Same!!");
}
else if (nResult > 0)
{
puts("string1 > string2");
}
else
{
puts("string1 < string2");
}
return;
}
[실행결과]
7. 한 행의 문자열을 입력받은 후, 어절 단위로 잘라내어 출력하는 프로그램을 작성하세요.
단, 반드시 strtok() 함수를 사용하여 코드를 작성하세요.
[소스코드]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void main(void)
{
char szBuffer[128] = { 0 };
char* pszToken = NULL;
char* pszDelimiter = " ";
printf("Input string: ");
gets_s(szBuffer, __crt_countof(szBuffer));
pszToken = strtok(szBuffer, pszDelimiter);
while (pszToken != NULL)
{
puts(pszToken);
pszToken = strtok(NULL, pszDelimiter);
}
return;
}
[실행결과]
8. 한 문자열을 압력받은 후, 유니코드로 변환하여 화면에 출력하는 프로그램을 작성하세요. 단, 화면에 출력할 때는 유니코드로 변환한 문자열을 출력해야 합니다. 따라서 MBCS 기반 함수인 printf() 함수로는 정상적으로 결과를 출력할 수 없습니다.
[소스코드]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(void)
{
char aszBuffer[64] = { 0 };
wchar_t awszBuffer[128] = { 0 };
size_t nConverted = 0;
printf("Input string: ");
gets_s(aszBuffer, __crt_countof(aszBuffer));
nConverted = mbstowcs(awszBuffer, aszBuffer, __crt_countof(aszBuffer));
if (nConverted > 0)
{
wprintf(L"Converted: %s\n", awszBuffer);
}
return;
}
[실행결과]
'c언어' 카테고리의 다른 글
14. 변수에 대한 고급 이론 (0) | 2023.06.26 |
---|---|
13. 유틸리티 함수 (0) | 2023.06.23 |
11. 함수 (0) | 2023.06.17 |
10. 배열과 포인터 (0) | 2023.06.13 |
9. 포인터와 메모리 관리 (0) | 2023.06.09 |