상세 컨텐츠

본문 제목

[C++] strlen(), strcmp() 구현

ALGORITHM

by charBS 2022. 1. 18. 05:52

본문

strlen()은 문자열의 길이를 반환하는 함수이고
strcmp()는 두 문자열이 같으면 1, 다르면 0을 반환하는 함수이다.

 

char형 배열의 빈 인덱스에는 NULL이 들어가 있다는 것을 이용한다.

 

 

strlen() 구현
#include <iostream>
using namespace std;


int calcLen(char name[20]) {
	for (int i = 0; i < 20; i++)
	{
		if (name[i] == '\0') {
			return i;
		}
	}
}

int main() {
	char name[20] = "consolelog";
	int len = calcLen(name);
	cout << len << endl;

	return 0;
}

 

실행결과

 

 

문자열 배열 안에 입력받는 문자가 있는지 체크하는 함수 구현

1. 함수를 사용한 방법

#include <iostream>
using namespace std;

int calcLen(char strset[20])
{
	for (int i = 0; i < 20; i++)
	{
		if (strset[i] == '\0') {
			return i;
		}
	}
}

int isFind(char strset[3][20], char ch, int len[])
{
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < len[i]; j++)
		{
			if (strset[i][j] == ch) {
				return 1;
			}
		}
	}
	return 0;
}


int main() {
	char strset[3][20] = { "jony", "consolelog", "assistant" };

	int len[3] = { 0 };
	for (int i = 0; i < 3; i++)
	{
		len[i] = calcLen(strset[i]);
	}

	char ch;
	cin >> ch;

	int flag = isFind(strset, ch, len);


	if (flag) {
		cout << "yes";
	}
	else {
		cout << "no";
	}

	return 0;
}

 

2. flag를 사용한 방법

#include <iostream>
using namespace std;

int calcLen(char str[20]) {
	for (int i = 0; i < 20; i++)
	{
		if (str[i] == '\0')
		{
			return i;
		}
	}
}
int main() {
	char strset[3][20] = {
		"jony",
		"consolelog"
		"assistant"
	};

	char ch;
	cin >> ch;

	int flag = 0;

	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < calcLen(strset[i]); j++)
		{
			if (strset[i][j] == ch)
			{
				flag = 1;
			}
		}

	}

	if (flag) {
		cout << "yes";
	}
	else {
		cout << "no";
	}
	
	return 0;
}

 

실행결과

 

 

strcmp() 함수구현

1. 함수를 사용한 방법

#include <iostream>
using namespace std;

int calcLen(char buf[20]) {
	for (int i = 0; i < 20; i++)
	{
		if (buf[i] == '\0') {
			return i;
		}
	}
}

int isSame(char buf1[20], char buf2[20]) {

	if (calcLen(buf1) != calcLen(buf2))
	{
		cout << "no";
		return 0;
	}

	for (int i = 0; i < 20; i++)
	{
		if (buf1[i] != buf2[i])
		{
			cout << "no";
			return 0;
		}
	}
	cout << "yes";
	return 0;
}

int main() {
	char buf1[20], buf2[20];
	cin >> buf1 >> buf2;

	isSame(buf1, buf2);

	return 0;
}

 

2. flag를 사용한 방법

#include <iostream>
using namespace std;

int calcLen(char buf[20]) {
	for (int i = 0; i < 20; i++)
	{
		if (buf[i] == '\0') {
			return i;
		}
	}
}



int main() {
	char buf1[20], buf2[20];
	cin >> buf1 >> buf2;

	int len1 = calcLen(buf1);
	int len2 = calcLen(buf2);
	if (len1 != len2) {
		cout << "no";
		return 0;
	}

	int flag = 1;
	for (int i = 0; i < len1; i++) {
		if (buf1[i] != buf2[i]) {
			flag = 0;
			break;
		}
	}

	if (flag) {
		cout << "yes";
	}
	else {
		cout << "no";
	}

	return 0;
}

 

실행결과

 

 

 

 

관련글 더보기