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, ";")는 처음 ";"찾은 후에 문자부터 그 다음 ";"가 나올 때 까지의 문자열을 리턴 합니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 2장 10번 (0) | 2019.04.06 |
---|---|
명품 C++ programming 실습문제 2장 9번 (0) | 2019.04.06 |
명품 C++ programming 실습문제 2장 7번 (0) | 2019.04.06 |
명품 C++ programming 실습문제 2장 6번 (0) | 2019.04.06 |
명품 C++ programming 실습문제 2장 5번 (0) | 2019.04.06 |