본문 바로가기

c언어

12. 문자, 문자열 처리 함수

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