まず、これが世界で最もばかげた質問であるかどうかをお詫び申し上げます。しかし、私は困惑していて、こことグーグルの両方でたくさんの検索をしました。私は自分でC++を教えているので、何を検索するかを知るために必要な語彙を必要としない可能性があります。
方程式を解析するための有限状態マシンを作成しようとしています。私はそれが以前に行われたことを知っていますが、私は学ぼうとしています。そのために、文字列を取得して数値を認識し、それらをdoubleまたはfloatに変換できるようにしたいと考えています。(どのフォーマットを使用するかについてのアドバイスをおもてなしします。)
文字列をdoubleに変換する関数があります:
double convertToDouble(string value)
{
/* -- From http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.2
Using stringstream, convert a string to a double by treating it like a stream
*/
istringstream stream(value);
double doubleValue;
stream >> doubleValue;
return doubleValue;
}
そして、文字列内の次の数値を探す関数があります。
string evaluateNextValue (int operatorPosition, string equation)
{
/* -- Find the next value
My idea is that, since I'm using spaces as my dividers, we'll look for
the first number and then, using insert to put the individual numbers
into a string until a space is found again. Then, the numbers--now
in the correct order--can be converted to a double and returned
*/
bool digitFound = false;
string workingNumbers;
for (int pos = operatorPosition; pos < equation.size(); pos ++)
{
if (equation.at(pos) == ' ' && digitFound == true)
{
double result = convertToDouble(workingNumbers);
cout << "Converting a string to " << result << endl;
cout << "The result plus one is: " << result +1 << endl;
return workingNumbers;
} else if (equation.at(pos) == ' ' && digitFound == false)
{
cout << "Skipping a blank space." << endl;
continue;
} else
{
if (digitFound == false)
{
digitFound = true;
cout << "First digit found." << endl;
}
cout << "Adding " << equation.at(pos) << " to the string." << endl;
workingNumbers.insert(workingNumbers.end(),equation.at(pos));
}
}
}
そして、これは私が一種のテストとして両方を呼び出すために使用しているmain()です。
int main()
{
string dataInput;
cout << "Insert a number" << endl;
getline(cin, dataInput);
cout << "You entered: " << dataInput << endl;
double numberValue = convertToDouble(evaluateNextValue(0, dataInput));
cout << "Adding ten: " << numberValue + 10;
return 0;
}
これが問題です。現在のように、evaluateNextValue()が文字列を返すので、機能します。私には少し不当に思えますが(すべてが不当に思えるかもしれませんが)、機能します。
コードに関数の変数resultを操作させると、正常に機能します。文字列をdoubleに変換するだけで、作業できます。
しかし、文字列をdoubleに変換して、doubleを返そうとすると。。。doubleは関数自体で正常に機能します。しかし、main()に到着したときはnanです。さらに奇妙な(またはとにかく奇妙な)のは、intを返そうとするとintが返されるという事実ですが、入力した値にリモートで接続されているものはありません。
私はあなたが提供することを気にかけているどんな助けにも感謝します。そして、これはここでの私の最初の投稿なので、私はどんなスタイルのポインターにもオープンです。