못 찾는 게 정상적인 경우로 보입니다.
if(find.str[i]==charStr) {
이런 구문은 문자열을 비교하는 것 같지만, 문자열을 비교하는 게 아니라 문자열의 주소값이 같은가 비교하는 것입니다
따라서 배열에 넣은 "computer"라는 문자열의 주소값과 별도로 비교한 "computer"라는 문자열의 주소값이 같으면 실행되고, 다르면 실행되지 않습니다. 두 문자열의 내용은 같습니다. 같은 내용이 두 군데의 메모리에 있는 것이죠
문자열의 내용이 같은가를 비교하시려고 한다면,
위에 #include <string.h>를 해주시고
이 부분 대신
if(find.str[i]==charStr) {
이 부분을 넣어주세요
if ( strcmp( find.str[i], charStr ) == 0 ) {
strcmp는 두 문자열의 내용을 비교하는 함수로 같으면 0, 틀리면 0이외의 값이 나옵니다.
chqh 님이 쓰신 글 :
: main에서
: find.FindView(300); 이 경우는 제대로 찾아주는데요
: find.FindView("computer"); 를 찾지못하고 그냥 프로그램이 끝나고 말아요
:
: 어느 책 부록 CD의 프로그램을 재미로 돌려보다가 이해가 안되서
: 이리 질문해봅니다
:
: ---------------------------------------------------------------------
:
: // Find.cpp : Defines the entry point for the console application.
: //
:
: // #include "stdafx.h"
: #include <iostream.h>
:
: class CFind
: {
: private:
: int num[5];
: char* str[5];
: public:
: CFind();
: ~CFind();
: void FindView(int number);
: void FindView(char* charStr);
: };
:
: CFind find;
:
: CFind::CFind()
: {
: find.num[0]=100;
: find.num[1]=200;
: find.num[2]=300;
: find.num[3]=400;
: find.num[4]=500;
: find.str[0]="book";
: find.str[1]="press";
: find.str[2]="student";
: find.str[3]="uni";
: find.str[4]="computer";
: }
:
: CFind::~CFind()
: {
: }
:
: void CFind::FindView(int number)
: {
: for(int i=0; i<5; i++)
: if(find.num[i]==number) {
: cout << "Found number.";
: cout << find.num[i];
: cout << "\n";
: break;
: }
: }
:
: void CFind::FindView(char* charStr)
: {
: for(int i=0; i<5; i++)
: if(find.str[i]==charStr) {
: cout << "Found string.";
: cout << find.str[i];
: cout << "\n";
: break;
: }
: }
:
: void main(void)
: {
: find.FindView(300);
: find.FindView("computer");
: }
|