1. 문제

 

8. 한 라인에 ';'으로 5개의 이름을 구분하여 입력받아, 각 이름을 끊어내어 화면에 출력하고 가장 긴 이름을 판별하라.

 

 

2. 결과

 

 

 

3. 코드

 


#include <iostream>
#include <cstring>

using namespace std;

int main()
{
	char a[50];
	char *name[5], *temp;
	int i;

	cout << "5 명의 이름을 ';'으로 구분하여 입력하세요" << endl << ">>";
	cin.getline(a, 50);

	name[0] = strtok_s(a, ";", &temp);

	
	for (i = 1; i< 5; i++)
	{
		name[i] = strtok_s(NULL, ";", &temp);
	}
	
	for (i = 0; i<5; i++)
		cout << i + 1 << " : " << name[i] << endl;

	int max = strlen(name[0]); int n = 0;
	for (i = 1; i<5; i++)
	{
		if (strlen(name[i]) > max) { n = i; break; }
	}
	cout << "가장 긴 이름은 " << name[n] << endl;
}

 

 

4. 설명

 

string 변수를 사용하여서 string에 등록되어 있는 함수를 이용하여 해결할 수도 있지만 아직 교재에 나오지 않았으므로 문자열 배열을 사용하였습니다.

 

 

이 문제를 해결하려면 우선 처음 입력받을 때 ';'을 구분하여 입력받는 것이 아니라 하나의 문자열로 입력 받은 후 그 문자열에서 ';'를 구분하여서 문자열을 나눠야 한다는 것을 알아야 합니다.

 

그러면 우선 문자열 배열 a에 문자열 하나를 입력 받았습니다.

 

그 후 strtok()함수를 사용하여서 ';'을 기준으로 이름들을 나눈 후 char *name[5]배열 요소들로 저장합니다.

 

그 다음 strlen()함수를 이용하여서 가장 긴 이름을 가진 사람을 구합니다.

 

※ strtok(a, ";") : 처음부터 첫 ";"가 나올 때까지의 문자열을 리턴 합니다.

그 다음에 있는 strtok(NULL, ";")는 처음 ";"찾은 후에 문자부터 그 다음 ";"가 나올 때 까지의 문자열을 리턴 합니다.

+ Recent posts