私たちは皆、文字列から数値に変換する方法を知っています。
int str2num(const string& str)
{
stringstream is(str);
int result;
return is >> result ? result : 0;
};
私の質問は、文字列を数値に変換できないが0ではない場合を区別できるようにしたいです。例:
1.) "0" => 0
2.) "0dasd" => 0
3.) "" => 0
4.) "some string" => 0 but true
5.) "345" => 345
ケース(4)を検出できるようにしたい。私が持っている唯一のアイデアは、文字列!! .find()
か何かを検索することです。stringstreamには、この状況を示す何らかの方法がありますか?
編集:いくつかの説明:num2str()
会話が失敗したり戻ったりしたときに私が大丈夫な関数として、関数はie0
にもなります。しかし、では、関数内でそれを検出できるようにしたいので、あなたが言ったように...をスローするか、pair<>またはout-variableを使用して帯域外データを返します。return 0
(cases:1,2,3,4)
case 4
err
または、さらに明確にするために、私は検出したい:
それis >> num returns 0 (ex:"0","0.0","000", "0sad","asd0ss")
が本当にゼロであるか、それが数値に変換できない文字列であるかどうかIEは0文字列と非0文字列を区別します
PS>変換時に0-in-a-stringのどのケースが0-numまたはjust-stringとして解釈されるかわからないため、おそらく混乱も生じます。私はさらに混乱しましたか:)またはそれは今より明確になっていますか?Perlのゼロだが真のセマンティクスに沿って何かを実装したい。
EDIT2:範囲外のデータを正確に返す方法のすべての例をありがとう、本当に感謝しています..つまり本当に..(おそらくペア<>を使用しますが、ブーストやC++11
セマンティクスはまだ使用しません)。しかし、私は「ストリングストリームとは何か、そしてその違いをどのように検出するか」にもっと興味があり0-string
ましnon-0-string
た。