2010-12-16 19 views
0

私は同様の質問を見ましたが、答えはVisual C++ 6では機能しませんでした。 私はCString(Visual C++ Stringクラス)を数字をコンマで区切ったもの:文字列内のすべての数値を配列(C++)に1つずつ読み込む方法

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

と1つ1つをint配列に入れたいと思います。 私はstringstreamを試しましたが、それは私に最初のintだけを与えます。 誰かを助けることができますか?

P.S. これは私の失敗した試みである:私は最初の数(5)になるだろうとだけ私の第一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

ありがとうございます。このように文字列をトークン化することはできません。代わりにboostizerのようなライブラリを見て、きれいなトークナイザを提供します。

しかし、あなたの文字列は、常にこのようになっていることを保証することができれば、あなたが試すことができます:

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

これはブーストで引っ張ってたあなたを救うなど

+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

ありがとう!これも興味深いです – 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); 
関連する問題