私の値のすべての型に対して乗算のためのオーバーロード演算子を作成する必要がありますクラス。しかし、私はどのように文字列にSを整数で乗算するかをコード化することになっているのかどうかはわかりませんが、Nは文字列SをN回連結したものです。これは私が持っているものです:整数Nに文字列Sを掛け合わせるとSがN回連結されます。
enum Type {
INTEGERVAL,
FLOATVAL,
STRINGVAL,
UNKNOWNVAL,
};
class Value {
int i;
float f;
string s;
Type t;
public:
Value(int i) : i(i), f(0), t(INTEGERVAL) {}
Value(float f) : i(0), f(f), t(FLOATVAL) {}
Value(string s) : i(0), f(0), s(s), t(STRINGVAL) {}
Type GetType() { return t; }
int GetIntValue();
float GetFloatValue();
string GetStringValue();
Value operator*(const Value& op) const
{
if (t == INTEGERVAL)
{
// I can multiply with another integer or float
if (op.t == INTEGERVAL)
return Value(i * op.i);
else if (op.t == FLOATVAL)
return Value(i * op.f);
}
else if (t == FLOATVAL)
{
// I can multiply with another integer or float
if (op.t == INTEGERVAL)
return Value(f * op.i);
else if (op.t == FLOATVAL)
return Value(f * op.f);
}
else if (t == STRINGVAL)
{
if (op.t == INTEGERVAL)
{
//I can concatenate a string times the value of the integer
//Not sure how to do it//
return Value(); //I don't know what the return should be//
}
}
return Value(); // invalid!
}
};
私は本当にこれが行われるはずですいくつかのガイダンスをいただきありがとうございます。 このコードに関するその他の情報を提供する必要がある場合や、より良い方法で質問する必要がある場合はお知らせください)
ありがとうございました!
誰も文字列があなたの[値]クラスに格納されている方法を知っていない連結すると仮定すると、
一時的な文字列と
for
ループを使用することができます。あなたは 'std :: string'メンバーを持っていますか? 'char *'?他の形式の文字列ですか? –しかし、一般的には、文字列オペランドの長さを見つけ、それを整数で掛けて結果の長さを求めます。スペースを割り当て/事前予約し、その文字列を何度も出力文字列にコピーします。 –
@BenVoigtありがとうございました。私は本当に応答を感謝します。この質問に適切なValueクラスの部分を含めました。 Valueクラスが含まれているので、あなたの言ったことはまだ効くでしょうか? – Phoenix8