私はこのサイトや他の多くのサイトを何日もくまなく調べてきましたが、ここに私が抱えている問題があります。解析する必要がある からの文字列がchar*
あり、90% の確率で問題なく解析されますが、特定の文字列では文字化けが発生し、期待どおりに分割されません。画像で例を見ることができます: Garbage Characters
ここに私が使用しているコードがあります(これに代わる多くの代替手段も試しましたが、これが唯一の近道です)
bool __stdcall ChatLogger::HandleNewChatLine( short sMode, char* szText )
{
ofstream chatlog;
ofstream chatparsed;
if(sMode == 660)
{
string data = szText;
chatparsed.open("D:\\chatlog_parsed.txt", ios_base::app );
chatparsed << data << '\n' << '\n';
chatparsed.close();
string buf; // Have a buffer string
stringstream ss(data); // Insert the string into a stream
vector<string> tokens; // Create vector to hold our words
while (ss >> buf)
{
tokens.push_back(buf);
}
chatparsed.open("D:\\chatlog_parsed.txt", ios_base::app );
for(size_t i = 0; i < tokens.size(); i++)
{
chatparsed << "array pos: " << i << " " << tokens[i] << '\n';
}
chatparsed.close();
}
chatlog.open("D:\\chatlog.txt", ios_base::app );
chatlog << "Line ID: " << sMode << " " << "Text: " << szText << '\n';
chatlog.close();
return false;
}
最終的には、1 行に 1 語のみを指定する必要があります。可能であれば、ベクター内の個々の文字列から削除するか、理想的にはその前に、ガベージ文字を削除する必要があります。おそらくstd::stringstream
、ベクトルに入れ、ゴミ文字を削除するか、何らかの方法でスペースに変換する前に、を反復処理する何らかの方法があります。