質問

私は、二重に文字列を変換しようとしています。コードは非常に簡単です。

            double first, second;
            first=atof(str_quan.c_str());
            second=atof(extra[i+1].c_str());
            cout<<first<<" "<<second<<endl;
            quantity=first/second;

余分に変換しようとする場合、コンパイラは私に知恵のこの宝石をスローします:

  

エラー:メンバーc_strでのリクエスト   extra.std ::のbasic_string <_CharT、   _CharT =チャー、_Traits = STD :: char_traits、_Alloc =有する_Traits、_Alloc> ::演算子[] [   std ::アロケータ](((符号なし   int型)非クラスである(I + 1)))、   char型

私はそれが何を意味するのか見当がつかない。私は文字列として余分のままにした場合、私は[I + 1]余分をCOUT場合、私は3を取得プログラム51(3 ASCII)によって最初(2)DIVしよう。一体何が起こっているの?

役に立ちましたか?

解決

extrastd::stringあるように聞こえるので、extra[i+1]は非クラス型であるcharを返します。

あなたはextrath位置から始まる文字列i+1を解析しようとしているように、

これが鳴ります。あなたはこの使用を行うことができます:

second = atof(extra.substr(i + 1).c_str());

他のヒント

のエラーメッセージに基づいて、extraは型std::stringです。あなたがextra[i+1]を行うと、結果はタイプcharのものであり、文字列extraat位置i+1の文字が含まれています。

おそらくないあなたが意図したもの。

次のように

の修正として、新しい文字列でextra[i+1]を置き換えます:

extra2 = extra.substr(i+1);
// ...
second=atof(extra2.c_str());

この変換を処理するためのより良い方法は、(誤りが少ない傾向がある)stringstreamsを使用することである。

stringstream ss(str_quan);
double first;
ss >> first;

あなたは言っていないが、私は「余分な」と思うタイプのstd ::文字列です。だから、式 '3' であるように思われ、 "エクストラ "の" I + 1「余分には、[I + 1]の文字である"。

あなたが実際にやろうとしているか?

あなただけI + 1「余分な」の最後までの文字をしたい(そしてあなたは余分があるどのくらい知っている)、あなたのような何かをしたい場合:

 second = atof(extra.c_str() + i + 1);
助けを求める場合には、

多くの場合、コンパイルの例を提供するために、reallyt usfullです。

私の推測(と私重点は、十分な型情報や行番号がないbecuase推測)。

second=atof(extra[i+1].c_str());

// Guess 
// extra is std::string.

このように余分[X]

)(方法c_strを持たない文字を返します
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top