<프로그램 개요>
string을 list에 token화 시켜서 입력하는 소스입니다.
ex) abc라는 입력 string이면 abc를 list의 첫번째 원소로 갖게 만듭니다.
질문 :
class의 멤버함수 Tokenize(char *pszInputQuery)에서 InpuLIst멤버변수의 값을 출력하면 제대로 나오는데
class 외부의 main()함수에서 객체를 선언해서 InpuLIst멤버변수의 값을 출력하려고 하면
쓰레기 값이 출력되네요. 벌써 5시간째 삽질 중이예요.
해결책 아시는 분 답변부탁드려요.
#include <list>
#include <IOSTREAM>
using namespace std;
class CQuery
{
public:
// 사용자가 입력한 query
list<char *> InpuLIst;
CQuery(char *pszInputQuery)
{
Tokenize(pszInputQuery);
}
void Tokenize(char *pszInputQuery)
{
// token 별로 나누어서 list에 삽입
// 각 문자를 하나의 string으로 만들어서 token화 시킨다.
char c=NULL;
char *pszTemp=&c;
// 한 token의 길이
int nTempLength=0;
while(*pszInputQuery != NULL)
{
*pszTemp=*pszInputQuery;
pszTemp++;
nTempLength++;
// 입력 query의 끝이면 거기까지의 string을 list에 token으로 삽입
if(*(pszInputQuery+1) == NULL)
{
*pszTemp=NULL;
// string의 처음 위치로 이동
pszTemp=pszTemp-nTempLength;
nTempLength=0;
// list에 token으로 삽입
InpuLIst.push_back(pszTemp);
list<char *>::iterator i;
for(i=InpuLIst.begin();i!=InpuLIst.end();i++)
cout<<*i<<endl; // 출력결과 : abc 제대로 나옴
}
pszInputQuery++;
}
}
};
void main()
{
char *pszInputQuery="abc";
CQuery Query=CQuery(pszInputQuery);
list<char *>::iterator i;
for(i=Query.InpuLIst.begin();i!=Query.InpuLIst.end();i++)
cout<<*i<<endl; // 원하는 결과 : abc
// 출력결과 : 쓰레기 값이 출력됨.
}
|