2017-05-09 38 views
0

我必须为我的值中的所有类型创建乘法的重载运算符类。但我不知道我应该如何编码乘以一个字符串,比如说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! 
} 
}; 

我真的很感谢一些关于如何完成这个任务的指导。 请让我知道,如果我需要提供有关此代码的任何其他信息,或者如果我需要以更好的方式陈述我的问题=)

谢谢大家!

+0

没有人知道如何将字符串存储在你的'Value'类。你有'std :: string'成员吗?一个char *'?一些其他形式的字符串? –

+1

一般来说,找到字符串操作数的长度,将其乘以整数以找出结果的长度。分配/预先保留空间,然后多次将字符串复制到输出字符串中。 –

+0

谢谢@BenVoigt。我非常欣赏这个回应。我包含了适合这个问题的Value类的部分。你说过的话现在还在起作用,现在Value类已经包含了吗? – Phoenix8

回答

1

您可以使用临时字符串和for
假设你有存储在i整数值,并要连接op.s

else if (t == STRINGVAL) 
    { 
     if (op.t == INTEGERVAL) 
     { 
      string temp; //Create a temporary string 
      //Optional but would be useful for reallocating 
      temp.reserve(op.s.length()*i); 
      for(int j=0;j<i;j++) //Assuming " i " has the count 
       temp += op.s;  //This will concatenate 

      return Value(temp); //Pass the newly created string 
     } 
    } 
+0

非常感谢你@Sniper这似乎完美的工作! – Phoenix8

+0

更好地预留空间,因为你确切知道需要多少。 –

+0

@BenVoigt我同意,但根据http://www.cplusplus.com/reference/string/string/operator+=/'操作符+ ='为字符串**通过在当前值的末尾附加其他字符来扩展字符串* * – Sniper