|
分類:[C/C++]
ふと疑問に思ったことがあります。(効率が悪いという点は置いておくとして、振る舞いに疑問を抱きました。) 標準入力による空白を含む文字列があり、これをカンマ区切りにし、整数に変換した結果はどういう振る舞いをするのかということです。
キーボードで 1,2, 3,4 , 5 ,6 1,7 みたいな空白を含む入力があったと想定します。 ここで str_B[4]、入力では両側に空白がある" 5 "に当たるところに着目して考えたとき。
@標準入力cinでは空白を受け付けず、対応方法はcin.getlineがあるかと思います。 Aそして、カンマ区切りすると単純に、str_B[4]=" 5 "と両側に空白が含まれた状態なのですか? Bもし、stoiで整数化したときには、空白のせいで整数ではないと判定して0を返すのか、空白を無視して5と返してくれるのかどちらでしょうか。
予想では str_B[5]="6 1"というケースもあるので0を返すのかなと思っています。 もし、0を返すという場合、str_B[5]というケースを想定しない場合で、空白を含む文字列を整数化する方法って存在したりしますか?
string str str_B; stringstream str_A{str};
cin.getline(str,str.size()); …@ while (getline(str_A, num, ',')){str_B.push_back(num);} …A int hoge = stoi(str_B[4].c_str()); …B
|