-2

以前の質問に答えてくれた人の 1 人から次のコードを試しました。

私の場合、この文字列で値 1.2597 を取得しようとしています。私の非機能要件は、ここで多くの仲間のコーダーが推奨するstrtok代わりに使用することです。boost

ただし、結果を使用できる cstr* にキャストするという問題が発生しましたstrtok

1.2597 を取得する方法を知りたいです。strtok

string result= "CCY 1.2597 Down 0.0021(0.16%) 14:32 SGT [44]";

char *first = strtok(result, ' ');
char *second = strtok(0, ' ');
4

3 に答える 3

2

strtokC++で直接使用することはできませんstd::string。変更可能なゼロで終了するCスタイルの文字列が必要でありstd::string、その形式のaの内容にアクセスする標準的な方法はありません。

最も簡単なオプション(Boostまたは他の非標準ライブラリを使用しない)は、代わりにC++ストリームを使用することです。

std::stringstream stream(result);
std::string first, second;
stream >> first >> second;

必要に応じて、2番目のトークンを直接数値タイプに変換することもできます。

strtok何らかの理由で本当に使用したい場合、1つの可能性は、文字列を一時的な可変バッファにコピーすることです。

std::vector<char> temp(result.begin(), result.end());
temp.push_back(0);

char * first = strtok(&temp[0], ' ');
char * second = strtok(0, ' ');

他の主要な障害に注意してくださいstrtok:それはスレッドセーフではありません。

于 2012-07-24T09:59:56.523 に答える
1

これは機能します:

std::string result= "CCY 1.2597 Down 0.0021(0.16%) 14:32 SGT [44]";
size_t pos0 = result.find(' ');+1
size_t pos1 = result.find(' ',pos0);
std::string final_result = result.substr(pos0,pos1-pos0);
于 2012-07-24T10:14:32.670 に答える
1

ええ、Mike Seymore が述べたように、 std::string を可変バッファにコピーする必要があります。すでに string.h が含まれているので、単純に strcpy を使用して std::string を変更可能な char* にコピーします。ヌル終了 + 実際に '\0' を挿入するためのスペースを含めることを忘れないでください;D

std::string result = "...";
char* token;
char* buffer[res.length() + 1];  //Space for '\0'
strcpy(buffer, result.c_str());
buffer[res.length()] = '\0';     //insert '\0'
token = strtok(buffer, " ");
while (token != NULL) {
  /* work with token */
  token = strtok(NULL, " ");
}
于 2012-07-24T10:26:07.633 に答える