2017-05-09 36 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