본문 바로가기
개발&코딩/C

C언어 문자열 함수를 이용한 심화예제 풀어보기

by 우동이 2020. 9. 10.
300x250

C언어의 문자열을 다루는 함수에 대한 심화 내용을 예제로 풀어보겠습니다.

 

 


1. 배열에 담긴 문자의 크기 반환하기 - sizeof(), strlen()

#include <stdio.h>

int main()
{
    char str[20]="Hello world!";
    int count=0;
    int size=0;
	while(str[count] !='\0'){
		count++;  
		size++;  
		}
	printf("str 문자열에 담긴 문자열의 크기는 %d입니다.", size);
    
    return 0;
}
>>> str 문자열에 담긴 문자열의 크기는 12입니다.

C에서 문자열의 크기와 길이를 구하는 함수들은 sizeof()나 strlen()등이 있지만

함수를 이용하지 않고 직접 문자의 크기를 카운트해보겠습니다.

반복문을 사용해 size를 증가시켜 크기를 측정했습니다.

 

str문자열에는 20이라는 크기가 선언되어 있으나 실제로 들어있는 문자열의 크기를 세서 반환합니다.


2. 포인터의 역할을 수행하는 문자열 상수

#include <stdio.h>

int main()
{
	printf("%u\n", "dream");
	printf("%u\n", &"dream"[1]);
	printf("%c\n", *("dream"));
	printf("%c\n", "dream"[3]);
    
    return 0;
}

>>> 
4210688
4210689
d
a

상수란 변하지 않는 수라는 뜻으로 문자열 상수 그 자체가 포인터의 역할을 할 수 있습니다.

  1. 문자열 상수의 시작 주소 값
  2. 문자열 상수의 시작 주소 값 +1 된값
  3. 포인터로 문자열의 시작 주소 값을 참조
  4. 문자열 상수의 네 번째 자리 값

3. 문자열 선언 후 짝수번째와 홀수번째 따로 출력하기

#include <stdio.h>

int main()
{
	char str[20]="BananaAllergyMonkey";
	int size=0;
	while(str[size] != '\0')
		size++;
		
	printf("짝수문자 출력\n");
	for(int i=0; i<size; i+=2)
		printf("%c", str[i]);
	printf("\n");
		
	printf("홀수문자 출력\n");
	for(int j=1; j<size; j+=2)
		printf("%c", str[j]);
    
    return 0;
}

>>>
짝수문자 출력
BnnAlryoky
홀수문자 출력
aaalegMne

임의의 문자가 들어가 있는 char형 배열 str에서 짝수번째와 홀수번째의 문자를 별도로 출력합니다.

이는 초기 시작 값을 달리 해서 출력했습니다.


4.strcpy()를 사용해 문자열 복사하기

#include <stdio.h>
#include <string.h>
int main()
{
	char str[20]="BananaAllergyMonkey";
	char str2[20];
	
	strcpy(str2,str);
	printf("%s\n", str2);
    return 0;
}
>>> BananaAllergyMonkey

strcpy()는 문자열을 복사합니다.

string.h 헤더가 선언되어야 사용할 수 있습니다.

 

 

strcpy()의 원형은 아래와 같습니다.

char *strcpy(char *, char*)


5. strlen()을 사용해 문자열 길이 측정

#include <stdio.h>
#include <string.h>
int main()
{
	char str[20]="BananaAllergyMonkey";
	int size=0;
	
	size=strlen(str);
	printf("크기 : %d\n", size);
    return 0;
}
>>> 
크기 : 19

strlen() 함수는 문자열의 길이를 측정해 반환합니다.


6. strcmp()를 사용해 문자 열간 사전적 순서 비교

#include <stdio.h>
#include <string.h>
int main()
{
	char str1[20]="BananaAllergyMonkey";
	char str2[20]="AppleAntTrust";
	int size=0; 
	size=strcmp(str1,str2);
	
	if(size = 1)
		printf("사전적 순서는 str2이 앞섭니다.\n");
    else if(size = -1)
		printf("사전적 순서는 str1이 앞섭니다.\n");
	else if(size = 0)
		printf("둘은 동일합니다\n");
	
	return 0;
}
>>> 사전적 순서는 str2이 앞섭니다.

strcmp()는 문자 열간의 사전상 순서를 비교해서 정수 값을 반환합니다.

return값이 1 일 경우 str1> str2

-1일 경우 str1 <str2

0이면 동일한 세 가지 경우의 조건식을 설정합니다.

 


7. strcat()을 사용해 문자열 이어 붙이기

#include <stdio.h>
#include <string.h>
int main()
{
	char str1[20]="else";
	char str2[20]=" if";


	strcat(str1,str2);
	printf("%s\n", str1);
	
	return 0;
}
>>> else if

strcat()은 문자열을 이어 붙이는 기능의 함수입니다.

 


8. gets(한 줄 모두 입력), puts(문자열 출력 후 줄 바꿈)

#include <stdio.h>
#include <string.h>
int main()
{
	char str[20];
	
	puts("값을 입력하시오 >> ");
	gets(str);
	puts(str);

	return 0;
}
>>> 
값을 입력하시오 >>
hi hello
hi hello

gets() : scanf()와 다르게 공백을 포함한 한 줄 전부를 입력받습니다.

puts() : 문자열을 출력할 때 줄 바꿈 문자를 출력합니다.

 

 

gets()는 설정된 용량 이상의 문자열이 입력되면 다른 메모리의 값을 침범할 수 있습니다.

puts() 역시 줄 바꿈 문자가 포함되어 있기에 각각 알맞은 상황에 사용해야 합니다.


9. getchar(하나의 문자를 입력), putchar(하나의 문자를 출력)

#include <stdio.h>
#include <string.h>
int main()
{
	char ch;
	
	
	printf("문자를 입력하시오 >> ");
	ch=getchar();
	putchar(ch);

	return 0;
}
>>> 
문자를 입력하시오 >> a
a

putchar()와 getchar()는 각각 하나의 문자만을 입출력하는 함수입니다.

 

300x250

댓글