본문 바로가기
윤성우 열혈강의 C 정리

[ C 열혈강의 ] 21장 연습문제 : 문자와 문자열 관련 함수

by 어린왕자1234 2022. 7. 8.
// [ 문제21 - 1  : getchar 함수와 putchar함수의 활용 ]  

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

int convCase(char ch, char* ptr);

int main(void)
{
	char ch;
	int i;
	char str[20];
	fputs("하나의 문자를 입력하시오 :",stdout);
	ch = getchar();
	i = convCase(ch, str);
	if (i == -1)
	{
		printf("범위를 벗어난 입력입니다.\n");
		return -1;
	}
	else
		printf("입력문자 \'%c\'의 %s는 \'%c\'입니다.", ch,str, (char)i);
	return 0;

}

int convCase(char c, char* ptr)
{
	int diff = 'a' - 'A';

	if (c >= 'A' && c <= 'Z')
	{
		strcpy_s(ptr,20,"소문자");
		return c + diff;
	}

	else if (c >= 'a' && c < 'z')
	{
		strcpy_s(ptr, 20, "대문자");
		return c - diff;
	}
	else
		return -1;
}

// [ 문제21 - 2  : 문자열 처리 ]  
// 문제1 : 문자열내 숫자들의 합을 반환

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

void convToInt(char c, int* sum);

int main(void)
{
	int sum = 0;
	char str[100];
	size_t len;
	printf("숫자가 포함된 문자열 입력 :");
	scanf_s("%s", str,100);
	len = strlen(str);
	for (int i = 0; i < len; i++)
	{
		convToInt(str[i], &sum);
	}

	printf("result : %d", sum);
}

void convToInt(char c, int* sum)
{
	if (c >= '0' && c <= '9')
		*sum += (int)(c - '0');
}

// [ 문제21 - 2  : 문자열 처리 ]  
// 문제2 : 
//str[1] -> str[3] 복사
// str[2] -> str[3] 붙이기



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

void RemoveBSN(char* str);

int main(void)
{
	char str[3][20];

	for (int i = 0; i < 2; i++)
	{
		printf("문자열 입력 [%d]:", i + 1);
		fgets(str[i], 20, stdin);
		RemoveBSN(str[i]);
	}
	strcpy_s(str[2], 20, str[0]);
	strcat_s(str[2], 20, str[1]);
	printf("result : %s", str[2]);
}

void RemoveBSN(char* str)
{
	size_t len = strlen(str);
	if (str[len - 1] == '\n')
	{
		str[len - 1] = '\0';
	}
}

// [ 문제21 - 2  : 문자열 처리 ]  
// 문제3 : 
// 이름 나이를 하나의 문자열로 인식
// 두사람의 정보를 입력 받아, 이름과 나이가 같은지 판단

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

void inputData(char arr[][15], int len);
int getSpaceIndex(char* str);
int compName(char str1[], char str2[]);
int compAge(char str1[], char str2[]);

int main(void)
{
	char str[2][15];
	inputData(str, 2);

	if (!compName(str[0], str[1]))
		printf("이름이 동일합니다.\n");
	else
		printf("이름이 다릅니다.\n");

	if (!compAge(str[0], str[1]))
		printf("나이가 동일합니다.\n");
	else
		printf("나이가 다릅니다.\n");

}

void inputData(char arr[][15],int len)
{
	for (int i = 0; i < len; i++)
	{
		printf("데이터 입력[이름 나이] :");
		gets_s(arr[i],sizeof(arr[0]));
	}
}

// 반환값 : 공백존재: 해당 인덱스, 미존재: -1
int getSpaceIndex(char* str)
{
	size_t len= strlen(str);
	for (int i = 0; i < len; i++)
	{
		if (str[i] == ' ')
			return i;
	}
	return -1;                  
}

// 반환값 - 일치: 0, 불일치: 1
int compName(char str1[], char str2[])
{
	int spaceIndex1 = getSpaceIndex(str1);
	int spaceIndex2 = getSpaceIndex(str2);
	int result=0;

	if (spaceIndex1 != spaceIndex2)
	{
		result = 1;
	}
	else if (strncmp(str1, str2,spaceIndex1 ) != 0)
			result = 1;
	return result;
}

// 반환값 - 일치: 0, 불일치: 1
int compAge(char str1[], char str2[])
{
	int spaceIndex1 = getSpaceIndex(str1);
	int spaceIndex2 = getSpaceIndex(str2);
	int age1, age2;
	int result=0;

	age1 = atoi(&str1[spaceIndex1 + 1]);
	age2 = atoi(&str2[spaceIndex2 + 1]);



	if (age1 != age2)
		return 1;
	else
		return 0;	
}