C Language [핵심정리] - 19
1. 문자열 길이 구하고 비교
문자열은 문자 여러개의 모음이라고 말씀드렸죠? 그렇기 때문에 길이가 존재합니다. 문자열의 길이는 strlen 함수로 구할 수 있으며, 함수명은 문자열의 길이(string length)에서 가져왔습니다. (해당 함수는 <string.h>파일에 선언되어 있습니다.)
strlen 함수에 문자열 포인터(배열)을 넣으면 문자열의 길이가 반환됩니다. strlen 함수로 문자열의 길이를 구할 때는 널문자를 포함하지 않습니다. 특히 배열에서 배열의 크기가 항상 문자열의 길이를 가리키는 건 아닙니다.
strlen 함수는 size_t 자료형을 반환하기 때문에 %zd 서식지정자를 사용합니다. 여기까지 따라오셨다면 자료형을 구분해서 그에 맞는 서식지정자를 사용할 수 있을거에요. 근데 분명 자료형을 맞게 썼다 생각하는데도 워닝(경고)가 뜬다면 일반적으로 size_t 자료형인 경우가 대부분이니 %zd 서식지정자를 쓰시거나 아니면 해당 값을 서식지정자에 맞게 형변환 해주시면 됩니다.
그럼 이해가 되셨는지 확인하기 위해 이 문제를 풀어보시죠.
code up - 1410번 문제 [올바른 괄호1]
https://codeup.kr/problem.php?id=1410
문제를 푸는 데 정답이란 없습니다. 자신이 맞다고 생각대로 코드를 작성해주세요~
일반적인 풀이법.
#include <stdio.h>
#include <string.h>
int main()
{
char input[1000] = { 0, };
char blank_left = '(';
int left_count = 0;
int right_count = 0;
scanf_s("%s", input, (unsigned char)sizeof(input));
for (int i = 0; input[i] != '\0'; i++)
{
if (input[i] == blank_left)
left_count += 1;
else
right_count += 1;
}
printf("%d %d", left_count, right_count);
return 0;
}
strlen 함수를 이용한 풀이법.
#include <stdio.h>
#include <string.h>
int main()
{
char input[1000] = { 0, };
char blank_left = '(';
int left_count = 0;
int right_count = 0;
int len = 0;
scanf_s("%s", input, (unsigned char)sizeof(input));
len = strlen(input);
for (int i = 0; i < len; i++) // for (int i = 0; i != len; i++)
{
if (input[i] == blank_left)
left_count += 1;
else
right_count += 1;
}
printf("%d %d", left_count, right_count);
return 0;
}
해당 사이트에 정답을 제출할 때는
scanf_s 함수 대신 scanf 함수를 사용해서 제출해주세요. 그렇지 않으면 컴파일 에러가 발생합니다.
ps. 스스로 풀어서 사고력을 기르는 걸 추천드려요
strcmp함수를 사용하면 두 문자열의 동일 여부를 비교할 수 있으며, 함수명은 문자열을 비교하다(string compare)에서 가져왔습니다. (<string.h>파일에 선언되어있습니다.)
시간이 없어 strcmp 함수는 다음시간에 더 자세히 다루도록 하겠습니다.