2017-09-30 9 views
1

私は方程式を使って代入を行っていますが、式のさまざまな部分を入力する方法がわかりません。3変数の方程式をC++で倍精度浮動小数点数型に分割する

方程式は常に以下のように書式化されます。 [double] [sign] [double] [x/y/z] [sign] [double] [x/y/z] = [double ]。

例:2.5y +の4.7x + 7Z = 46

これを実現するために、私は4重の変数と6つの文字変数を使用してみました。

double a、d、g、j;

char b、c、e、f、h、i;

このように、方程式は変数a b c d e f g h iに分割され、次にそれを操作することができます。

方程式のどこかに空白があった場合、それらを分割するためにistringstreamを使用できた可能性がありますが、そうではありません。私は入力ファイルを変更できません。

数字を倍精度で、文字/記号を文字数で入力するにはどうすればよいですか?

+0

コードはどこですか?あなたが得たエラーは何ですか?試しましたか? –

+0

私の問題はどこから始めるべきか分からないことです。私はistringstreamを使用して、スペースで分割することを確認しました。 –

答えて

1

istringstreamおよびout of stream演算子を使用できます。例えば :式

std::istringstream iss("2.5y+4.7x+7z=46"); 
double a,b,c,s; 
char v1,v2,v3; 
iss >> a; // read 1st koef 
iss >> v1; // read 1st var's name 
iss >> b; // read 2nd koef 
iss >> v2; // read 2nd var's name 
iss >> c; // read 3rd koef 
iss >> v3; // read 3rd var's name 
iss.ignore(); // skip '=' symbol 
iss >> s; // read sum 

徴候は関連koefsの兆候です。

+0

'ignore'は' = 'の前に入力に空白があると正しく動作しません(空白や時には空白がないかどうか不明です)。それを 'char'に読み込み、それを無視する方がよいでしょう。 –

+0

これは私が試みたのと似ていますが、istringstreamの区切り文字が空白で、入力には何もないことが間違っていない限り表示されます。同様のことをする代替手段がありますか? –

+1

@EmilyEvelan:空白は、 'std :: string'または' char * '変数に読み込むための区切りで、' double'と 'char'のためには空白は無視されますが、何も区切りません。このアプローチの唯一の本当の問題は、変数 'e'または' E'を持つと、double上の指数として誤って扱われることです。 –

関連する問題