2010-12-16 4 views
0

비슷한 질문을 보았지만 Visual C++ 6에서 응답이 작동하지 않았습니다. CString (visual C++ String class) with 쉼표로 나눈 숫자 :문자열에있는 모든 숫자를 배열 (C++)로 하나씩 읽어 오는 방법

CString szOSEIDs = "5,2,6,345,64,643,25,645"; 

그리고 나는 하나씩 int 배열에 넣고 싶습니다. stringstream을 시도했지만 첫 번째 int 만 제공합니다. 누군가 도움을 줄 수 있습니까?

P. 이 내 실패 시도이다 : 나는 첫 번째 숫자 (5)와 단지 내 1 SQL이 실행됩니다 얻을 것이 경우

std::string input; 
input = (LPCTSTR)szOSE_IDs; // convert CString to string 
std::stringstream stream(input); 
while(1) { 
    int n; 
    stream >> n; 
    if(!stream) 
    break; 
    szSQL.Format("INSERT INTO TEMP_TABELA (OSE_ID) values (%d)", n); // I create SQL from my IDs now available 
    if(!TRY_EXECUTE(szSQL)) //This just a runner of SQL 
    return false; 
} 

. 아이디어가 있으십니까? 이 문제는 그것이 당신의 문자열에서 , 안타 때 stream >> n이 실패하는 당신에게

답변

1

감사드립니다. 이 방법으로 문자열을 토큰화할 수는 없습니다. 대신 좋은 토크 나이저를 제공하는 boost와 같은 라이브러리를보십시오. 당신이 당신의 문자열은 항상 다음과 같습니다 보장 할 수있는 경우

그러나, 당신은 시도 할 수 있습니다 :이 등 부스트

+0

고마워요! 현재 작동하는 것처럼 보입니다! 조금 더 테스트하고보고 해 드리겠습니다. – Hoornet

+0

이것은 내 경우에 (적어도 현재는) 작동하기 때문에 올바른 비트를주고 있습니다 :) Mihran 's도 매우 흥미 롭습니다. – Hoornet

0
parse(CString& s, std::vector<int>* v) 

{ 
int l = s.size();//or something like this 
int res = 0; 
for(int i = 0; i < l; ++i) 
{ 
    if(s[i] == ',') 
    { 
    v->push_back(res); 
    res = 0; 
    continue; 
    } 
    res*=10; 
    res+=s[i] - '0'; 
} 
v->push_back(res); 
} 
int main() 
{ 
CString s="1,2,3,4,15,45,65,78"; 
std::vector<int> v; 
parse(s, &v); 
//... 
return 0; 
} 
+0

이 감사에 끌어 할 필요가 저장됩니다

int n; while (stream >> n) { // Work with the number here stream.get(); //skip the "," } 

! 이것도 재미있어 보이네 – Hoornet

+0

나는 당신의 대답에 대해서도 언급했고, 지금은 헬퍼 클래스에 백업으로 쓰여있다. 다들 감사 해요! – Hoornet

0
typedef size_t pos; 
    pos p; 
    string str("5,2,6,345,64,643,25,645"); 
    string chopped(str); 
    string strVal; 
    bool flag = 1; 
    do{ 
    p = chopped.find_first_of(","); 
    if(p == chopped.npos) 
     flag = 0; 
    strVal = chopped.substr(0,p); 
    chopped = chopped.substr(p+1); 
    //cout << chopped << endl; 
    cout << strVal << endl; 

    }while(flag); 
0
CString nums = _T("5,2,6,345,64,643,25,645"); 
CString num; 
std::vector<int> intv; 
int pos = 0; 
do { 
    if ((num = nums.Tokenize(_T(","), pos)) != _T("")) 
     intv.push_back(_ttoi(num)); 
    else 
     break; 
} while (true); 
관련 문제